我有一个带有子项目的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'
}
如果我从根项目中运行“ 渐变发布”,它将正确发布每个子项目。但是,我注意到与子项目相关的pom出版物中缺少子项目中定义的依赖项。
如果我在每个子项目中剪切并粘贴了子项目部分的内容,则生成的pom文件将包含正确的依赖项。 似乎“ fromcomponents.java ”不是对发布任务用来生成pom的东西的引用,但是当您调用该任务时,该任务将准确发布components.java包含的内容。 “从”方法。
一种解决方法,我将根目录中定义的方法移动了子项目代码:
rootproject.gradle
def configurePublishing(project) {
project.apply plugin: 'maven-publish'
…
}
然后我从每个子项目中调用它:
subproject.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'
}
这是可以接受的方法吗?是否有最佳做法可遵循?有更简单的方法吗?