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


85

从gradle maven-publish插件的文档中,很明显,您可以直接在中设置项目的groupId和:versionbuild.gradle

group = 'org.gradle.sample'
version = '1.0'

但是,artifactId似乎是从您正在使用的文件夹的名称中提取的。有没有办法artifactId显式设置?

Answers:


84

36.2.3。生成的POM中的标识值

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

            from components.java
        }
    }
}

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

您将需要适当的插件。

plugins {
    id 'maven-publish'
}

嗨,彼得,谢谢您的回复。查看我链接到的文档(也是65.4),我们显然有不同版本的文档。
Armand 2014年

嗯,它在2.0文档的65.2.3中。我的理解能力显然很差;我不知道在搜索“人工制品”页面时道歉的想法。
Armand 2014年

您所链接的章节中的示例65.4。
Peter Niederwieser 2014年

13
如果您想更改项目名称(这是一个单独的问题),则可以在中进行更改settings.gradle(例如rootProject.name = "something")。
Peter Niederwieser 2014年

2
重要提示:在settings.gradle中设置项目名称(例如rootProject.name =“ org.myorg.myproject”)对于解决Jenkins构建上传到默认为Jenkins工作区文件夹名称的groupId的问题至关重要。
Farrukh Najmi,

16

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

rootProject.name = 'myproject'

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

rootProject.children.each {
    it.name = ('app' == it.name ? 'MyAppName' : it.name)
}

正如@FarrukhNajmi在评论中提到的那样,在使用Jenkins进行构建时,在settings.gradle文件中添加rootProject.name可以阻止artifactID成为Jenkins作业名称。
Fodder

8

这是maven-publish插件的正确答案。它旨在作为旧版maven插件的后继产品。

如果像我一样,您仍然使用旧的插件,那么“如何为gradle项目设置Maven工件ID”的正确答案是:

uploadArchives {
    repositories {
        mavenDeployer {
            pom.artifactId = 'project-sample'
        }
    }
}

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

我不记得这是真的(距我处理此问题已有18个月了),但如果是这样,正确的答案是将您的maven插件升级到具有更好模型的新插件。谢谢!
马修·马克·米勒

6

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

对于每个子项目build.gradle:

jar {
    baseName = 'new-artifact-name-A'  //A beacause you also have B, C modules... 
}

在主build.gradle中:

publishing {
    publications {
        mavenJava(MavenPublication) {
           artifactId jar.baseName
           from components.java
        }
    }
}

找不到用于参数的方法jar()

2

为了构建android并使用jenkins发布到工件,我在应用程序模块的build.gradle中配置了以下设置,用于配置组ID,工件ID和版本。

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    group "com.company.division.productgroup" //add group id
    version "8.8.8" //add version

    defaultConfig {

        minSdkVersion 9
        targetSdkVersion 21
        versionCode 32
        versionName "$version"
        archivesBaseName = "android-appname" //add artifact id

    }

archivesBaseName无效
-act262

在较新的Gradle / Android版本中,我发现BasePluginConvention提供了setArchivesBaseName()方法,该方法可用于直接分配,并且它在Android Gradle插件3.1.4和Gradle 4.10.2上适用于我。 docs.gradle.org/current/javadoc/org/gradle/api/plugins/...
约翰Michelau

2

但是,artifactId似乎是从您正在使用的文件夹的名称中获取的。有没有一种方法可以显式设置artifactId?

一个简单的答案是设置jar.baseName,然后覆盖目录名称。

// changes the name of the jar from the directory name
jar.baseName = 'some_arifact_name';

这似乎对我有用。


1

Gradle中,您可以设置jar.archiveName覆盖工作文件夹名称的使用...

group = 'com.example'
version = '0.0.1-SNAPSHOT'
jar.archiveName = "myproject-0.0.1-SNAPSHOT.jar"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.