我正在使用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 jarWithSources
和from 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的内容,但from
和MavenPublication
的上下文如何解决?
答案 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
删除任务artifact
和publications
部分。它的工作原理包括源代码和已编译的类都是不常见的,并不是一个好主意。
添加自动安装的依赖关系pom.xml
- 请参阅 guice 。我在GitHub上更新了项目。