如何发布gradle子项目?

问题描述 投票:0回答:1

我有一个新创建的 Gradle 项目,有 2 个子项目。我需要将工件发布到 Nexus 存储库。因此,我在子项目中使用了 gradle 发布插件,如

build.gradle
文件中的以下代码示例。

plugins {
    id 'maven-publish'
}

group project.group

subprojects {
    publishing {
        publications {
            mavenJava(MavenPublication) {
                groupId project.group
                artifactId project.name
            }
        }
        repositories {
            maven {
                url project.url
                credentials {
                    username project.sonatypeUsername
                    password project.sonatypePassword
                }
            }
        }
    }

}

然后包含子项目

settings.gradle
文件如下。

include 'sub-proj-1'
include 'sub-proj-2'

在发布时,它会迭代根项目和 2 个子项目,但会在

sub-proj-2
工件名称下发布所有工件。

如果我执行

println project.name
,它将打印所有子项目名称并发布到最后一个子项目。

即使我尝试了如下

afterEvaluate
,它也发布了根项目下的所有工件。

mavenJava(MavenPublication) {
    groupId project.group
    afterEvaluate {
        artifactId project.name
    }
}

我已将上述代码片段的测试项目包含在Github存储库中

gradle
1个回答
0
投票

这对我来说是有效的。 在根项目 build.gradle 上

subprojects {
    apply plugin: 'java-library'
    apply plugin: 'maven-publish'
    publishing {
        publications {
            mavenJava(MavenPublication) {
                versionMapping {
                    usage('java-api') {
                        fromResolutionOf('runtimeClasspath')
                    }
                    usage('java-runtime') {
                        fromResolutionResult()
                    }
                }
                from components.java
            }
        }
        repositories {
            mavenLocal()
            maven {
                url = <repo-url>
                credentials {
                    username = <username>
                    password = <password>
                }
            }
        }
    }
}

在子项目build.gradle上

plugins {
    //plugins list
}
group = 'com.example.app'
version = LIB_VERSION

repositories {
    mavenCentral()
}
dependencies {
    // dependencies list
}

test {
    useJUnitPlatform()
}

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
    withSourcesJar()
    withJavadocJar()
}

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.