0

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

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

我发现只发布了 sub-module1 中的工件。

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

我想知道为什么 sub-module2 中的工件没有发布。

4

1 回答 1

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}"
        }
    }
}

确保不在 rootProject 的子模块通用配置中应用 maven-publish 插件。

于 2019-01-31T20:01:13.237 回答