gradle-maven发布插件仅发布第一个子模块工件



我有一个多模块项目,如下所示:

top-level-module
sub-module-1
sub-module-2
sub-module-3

顶级模块渐变配置如下所示:

...
def javaProjects() {
subprojects.findAll { new File(it.projectDir, 'src/main/java').directory }
}
configure(javaProjects()) {
apply plugin: "io.franzbecker.gradle-lombok"
apply plugin: 'java'
apply plugin: 'groovy'
apply plugin: "jacoco"
apply plugin: 'maven'
apply plugin: 'maven-publish'
...
publishing {
repositories {
maven {
url = ...
credentials {
username = ...
password = ...
}
}
}
}
}

子模块-1和子模块-2的渐变配置如下:

plugins {
id 'java'
id 'groovy'
id 'application'
id 'maven'
id 'maven-publish'
}
mainClassName = 'com.mycompany.MyClass'
applicationName = 'xxx-cli' // xxx-cli is different for both modules
...
publishing {
publications {
XXXCliTar(MavenPublication) {  // XXXCliTar is different in two modules
artifact(distTar)
artifactId "${applicationName}"
}
}
}

当我按如下方式使用发布任务时:

gradle -i build publish

我发现只有来自子模块1的工件被发布。

真正奇怪的是,这种情况只有在Jenkis作业(在linux从机上)中运行时才会发生。在我的windows开发机器上运行时不会发生这种情况!

我想知道为什么子模块2中的工件没有发布。

我认为maven发布插件中有一个错误。解决方法是不在根模块中定义publishing.repositories.maven配置,而是在子模块1和子模块2中复制它,如下所示:

publishing {
publishing {
repositories {
maven {
url = ...
credentials {
username = ...
password = ...
}
}
}
}
publications {
XXXCliTar(MavenPublication) {  // XXXCliTar is different in two modules
artifact(distTar)
artifactId "${applicationName}"
}
}
}

请确保不要在rootProject的子模块通用配置中应用maven发布插件。

最新更新