我有一个新创建的 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存储库中
这对我来说是有效的。 在根项目 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()
}
希望有帮助!