0

我正在尝试使用 gradle 发布两个子项目。我有两个子项目:SubprojectA 依赖于 SubprojectB。我想使用 maven-publish 发布它们。我在 build.gradle 中有这个:

plugins {
    id 'java'
    id 'maven-publish'
}

publishing {
    publications {
        SubprojectA(MavenPublication) {
            println(project(':subprojectA').tasks)
            groupId group
            artifactId 'subjprojectA'
            version version
            artifact project(':subprojectA').tasks.getByName('jar')
        }
        SubprojectB(MavenPublication) {
                groupId group
                artifactId 'subjprojectB'
                version version
                artifact project(':subjprojectB').tasks.getByName('jar')
        }
    }
    repositories {
        maven {
                url "http://some-url"
        }
    }
}

Gradle 尝试按字母顺序发布它们:由于 subprojectA 依赖于 subprojectB,因此它不起作用,因为 subprojectB 尚未发布。如果我将 subprojectA 重命名为 ZSubprojectA,如下所示:

        ZSubprojectA(MavenPublication) {
            println(project(':subprojectA').tasks)
            groupId group
            artifactId 'subprojectA'
            version version
            artifact project(':subprojectA').tasks.getByName('jar')
        }

然后它可以工作,但我不喜欢这个解决方案。我试过这样的事情:

project(':subprojectA') {
    publish.dependsOn(":subprojectB:build")
}

但它不起作用,并且 :subprojectB:publish 不存在。

4

1 回答 1

0

我已经能够解决它。这就是问题所在:

两个子项目都有各自的 build.gradle 文件。在 subprojectA 的 build.gradle 中有这样的东西:

plugins {
    id 'java'
}

sourceCompatibility = 1.8

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    implementation group: 'com.neovisionaries', name: 'nv-i18n', version: '1.22'
    implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.1'
    implementation group: 'com.myorg.something', name: 'subprojectB', version: '1.0.0-SNAPSHOT'

}

因此它试图从我的组织私有存储库中获取 subprojectB,我应该这样做:

compile project(":subprojectB")

我应该在我的问题中包含两个 build.gradle 文件。但是问题解决了。

于 2018-10-26T17:13:11.040 回答