如何设置gradle项目的maven工件ID?

Arm*_*and 75 gradle maven

从gradle这个Maven的发布插件的文件,很明显,您将groupIdversion该项目直接的build.gradle:

group = 'org.gradle.sample'
version = '1.0'
Run Code Online (Sandbox Code Playgroud)

但是,artifactId似乎取自您正在使用的文件夹的名称.有没有办法artifactId明确设置?

Pet*_*ser 74

36.2.3开始.生成的POM中的标识值

publishing {
    publications {
        maven(MavenPublication) {
            groupId 'org.gradle.sample'
            artifactId 'project1-sample'
            version '1.1'

            from components.java
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

工件ID默认为配置的项目名称settings.gradle,而项目名称默认为项目目录的名称.

  • 如果你想改变项目名称(这是一个单独的问题),你可以在`settings.gradle`中这样做(例如`rootProject.name ="something"`). (12认同)
  • 重要提示:在 settings.gradle 中设置项目名称(例如 rootProject.name = "org.myorg.myproject")对于解决 Jenkins 构建上传到基于默认 Jenkins 工作区文件夹名称的 groupId 的问题至关重要。 (2认同)

小智 12

与根settings.gradle文件相关,您可以使用以下命令更改根项目的名称:

rootProject.name = 'myproject'
Run Code Online (Sandbox Code Playgroud)

但是如果要更改子项目的名称(例如,AndroidStudio项目的默认"app"子项目),您可以在根settings.gradle文件中执行以下操作:

rootProject.children.each {
    it.name = ('app' == it.name ? 'MyAppName' : it.name)
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*ler 7

这是maven-publish插件的正确答案.这是作为旧版maven插件的后续版本.

如果像我一样,你仍然坚持使用旧版插件,那么"如何为gradle项目设置maven工件ID"的正确答案是:

uploadArchives {
    repositories {
        mavenDeployer {
            pom.artifactId = 'project-sample'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个坏主意。在此处执行操作意味着,当您为项目生成一个pom时,相对于其他地方相对于该项目声明的任何依赖项都不会获得正确的artifactId。 (2认同)

Oha*_*adR 6

如果您有一个多模块项目,并且希望工件的名称与Directory(在settings.gradle中设置)不同,那么我认为一个更好的方法是为每个子项目使用jar块,然后您可以编写baseName,它将是工件ID。然后,您不必在每个主项目中重写发布/发布块只需在主版本中编写一次即可。

对于每个子项目build.gradle:

jar {
    baseName = 'new-artifact-name-A'  //A beacause you also have B, C modules... 
}
Run Code Online (Sandbox Code Playgroud)

在主build.gradle中:

publishing {
    publications {
        mavenJava(MavenPublication) {
           artifactId jar.baseName
           from components.java
        }
    }
}
Run Code Online (Sandbox Code Playgroud)