gradle在POM中发布包含源文件和依赖项的Jar

Han*_*kCa 6 java documentation gradle

我正在使用gradle,我想在创建时.jar使用源文件创建publishToMavenLocal.我有这个容易工作:

task jarWithSources(type: Jar) {
    from sourceSets.main.output
    if (gradle.startParameter.taskNames.any{it == "publishToMavenLocal"}) {
        from sourceSets.main.allJava
    }
}

publishing {
    publications {
        // publish the data_deposit jar as a standalone artifact
        mavenJar(MavenPublication) {
            artifact jarWithSources
            artifactId "${jar.baseName}_jar"
            version project.version
        }
    }
    repositories {
        maven { ... }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是pom.xml缺少依赖关系.

如果我用这个:

publishing {
    publications {
        // publish the data_deposit jar as a standalone artifact
        mavenJar(MavenPublication) {
            // artifact jarWithSources    // Stopped using this
            from components.java          // Have added this
            artifactId "${jar.baseName}_jar"
            version project.version
        }
    }
    repositories {
        maven { ... }
    }
}
Run Code Online (Sandbox Code Playgroud)

这只是一个变化MavenPublication,然后我得到了完整pom.xml但没有任何来源.我不能找到一种方法,包括artifact jarWithSourcesfrom components.java.错误是:

Invalid publication 'mavenJar': multiple artifacts with the identical extension and classifier ('jar', 'null').
Run Code Online (Sandbox Code Playgroud)

难不成from components.javatype: Jar也.

任何人都可以建议我如何让这一切工作?

现在结束这个问题,我不得不说这Gradle有一个非常非常陡峭的学习曲线.它是一种计算机语言(DSL)所以必须是确定性的,尽管有时我想知道.我不知道如何(例如)如何from components.java工作(#1).对于尽可能多的文档(例如http://www.gradle.org/docs/current/userguide/publishing_maven.html和DSL指南),它不是很清楚.我认为文档可能更丰富.并且需要有一章关于"得到它".人们似乎需要了解一些范式转变!

#1 - 据我所知,这可以为您提供http://www.gradle.org/docs/nightly/userguide/java_plugin.html#sec:java_plugin_and_dependency_management的内容,但是如何在a from和上下文中使用MavenPublication

Opa*_*pal 8

在这里您可以找到工作示例,调用gradle clean publishToMavenLocal即可构建工件并将其发布到 maven 本地 maven 存储库(工件将从文件夹名称中获取,版本号未指定)。

似乎build.gradle文件应该稍微改变一下。项目发布了吗,我可以试试吗?

刚开始 gradle 确实看起来很困难,但是在配置第一个项目之后,您会很快掌握它。

编辑(在评论中讨论后)

要在单个 jar 中包含源代码和已编译的类,请将以下代码添加到build.gradle

jar { 
   from sourceSets.main.output
   from sourceSets.main.allJava
}
Run Code Online (Sandbox Code Playgroud)

和删除任务sourceJar,并artifact从部分publications。然而,它可以工作,包括源和编译类是不寻常的,不是一个好主意。

依赖项会自动添加安装pom.xml- 参见guice。我已经在 GitHub 上更新了项目。