如何使用gradle按特定顺序发布许多依赖的子项目?

时间:2018-10-25 20:47:59

标签: gradle dependency-management maven-publish

我正在尝试使用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不存在。

1 个答案:

答案 0 :(得分: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文件。但是问题解决了。