gradle这个Maven的发布插件只发布第一子模块文物

时间:2019-01-31 20:01:13

标签: gradle multi-module maven-publish

我有一个如下的多模块项目:

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

顶级模块gradle配置如下:

...
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 = ...
                }
            }
        }
    }
}

sub-module-1和sub-module-2具有如下的gradle配置:

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的工件未发布。

1 个答案:

答案 0 :(得分:0)

我认为maven-publish插件中存在错误。解决方法是不在根模块中定义Publishing.repositories.maven配置,而是在sub-module1和sub-modules2中复制它,如下所示:

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

确认不适用Maven的发布在rootProject对个子模块常见的配置插件。