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

时间:2015-01-12 03:00:28

标签: java gradle documentation

我正在使用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 { ... }
    }
}

但是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 { ... }
    }
}

这只是MavenPublication中的一个更改,然后我得到了完整的pom.xml,但当然没有来源。我找不到同时包含artifact jarWithSourcesfrom components.java的方法。错误是:

Invalid publication 'mavenJar': multiple artifacts with the identical extension and classifier ('jar', 'null').

暗示from components.java也是type: 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的内容,但fromMavenPublication的上下文如何解决?

1 个答案:

答案 0 :(得分:4)

Here你可以找到工作示例,它足以调用gradle clean publishToMavenLocal构建工件并发布到maven本地maven repo(工件将从文件夹名称中获取版本号是未指定< / em>的)。

似乎build.gradle文件应该略有改动。该项目是否已发布,我可以尝试一下吗?

一开始gradle似乎确实很难,但在配置完第一个项目之后你很快就会抓住它。

编辑(在评论中讨论后)

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

jar { 
   from sourceSets.main.output
   from sourceSets.main.allJava
}

sourceJar删除任务artifactpublications部分。它的工作原理包括源代码和已编译的类都是不常见的,并不是一个好主意。

添加自动安装的依赖关系pom.xml - 请参阅 guice 。我在GitHub上更新了项目。