我有一个带有子项目的 gradle 项目。每个子项目都会生成一个 jar 和一个 pom,并将其发布在存储库中
1) 在主项目 gradle 文件中有一个子项目部分,我用它来定义发布内容和发布位置:
来自 rootproject.gradle 的片段:
subprojects {
apply plugin: 'maven-publish'
publishing {
publications {
mavenJava(org.gradle.api.publish.maven.MavenPublication) {
from components.java
}
}
repositories {
maven {
url 'file://c:/temp/repo'
}
}
}
}
2) 在我的一个子项目的 gradle 文件中,我添加了一些依赖项:
来自 subproject.gradle 的片段:
dependencies {
compile group: 'my-group', name: 'my-module', version:'1.1.0'
}
如果我从 rootproject 运行“ gradle publish ”,它将正确发布每个子项目。但是,我注意到与子项目相关的 pom 发布中缺少子项目中定义的依赖项。
如果我在每个子项目中剪切并粘贴子项目部分的内容,则生成的 pom 文件包含正确的依赖项。似乎“<strong>from components.java”不是对发布任务应该用来生成pom的东西的引用,但是当您调用“from”方法时,该任务将准确发布 components.java 包含的内容.
作为一种解决方法,我在根中定义的方法中移动了子项目代码:
根项目.gradle
def configurePublishing(project) {
project.apply plugin: 'maven-publish'
…
}
我从每个子项目中调用它:
子项目.gradle
dependencies {
compile group: 'my-group', name: 'my-module', version:'1.1.0'
}
configurePublishing(project)
另一种解决方案可能是在子项目部分添加一个开关,并将所有内容集中在根项目的 gradle 文件中:
subprojects { subProject ->
switch(subproject.name) {
case: ‘my-subproject-with-dependencies’ {
dependencies {
compile group: 'my-group', name: 'my-module', version:'1.1.0'
}
break;
}
}
apply plugin: 'maven-publish'
}
这是一种可接受的方法吗?是否有最佳实践可以遵循?有更简单的方法吗?