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

时间:2014-07-18 14:43:49

标签: maven gradle

从草图maven-publish plugin's documentation开始,您可以直接在groupId中设置项目的versionbuild.gradle

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

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

8 个答案:

答案 0 :(得分:65)

来自36.2.3. Identity values in the generated POM

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

            from components.java
        }
    }
}

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

答案 1 :(得分:7)

This is the correct answer for the maven-publish plugin. This is intended as the successor for the older maven plugin.

If, as I am, you are stuck with the older plugin, the correct answer to "How do I set the maven artifact id for a gradle project" is:

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

答案 2 :(得分:7)

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

rootProject.name = 'myproject'

但是如果你想改变一个子项目的名称(例如,AndroidStudio项目的默认" app"子项目),你可以做这样的事情,仍然在根目录中settings.gradle档案:

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

答案 3 :(得分:5)

如果您有一个多模块项目,并且您希望工件的名称与目录(在settings.gradle中设置)不同,那么我认为更好的方法是为每个子项设置一个jar块-project,你可以编写baseName,它将是artifact-id。然后,而不是为每个子项目重写发布/发布块,只在主build.gradle中编写一次这样的方式:

每个子项目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
        }
    }
}

答案 4 :(得分:2)

  

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

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

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

这似乎对我有用。

答案 5 :(得分:1)

为了使用jenkins构建android并发布到artifactory,我在应用程序模块的 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

    }

答案 6 :(得分:1)

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

group = 'com.example'
version = '0.0.1-SNAPSHOT'
jar.archiveName = "myproject-0.0.1-SNAPSHOT.jar"

答案 7 :(得分:0)

您也可以添加条件来更改您的 artifactId。

publishing {
    publications {
        maven(MavenPublication) {

            //adding conditional
            artifactId = artifactId == 'original-name' ? 'my-specific-name' : artifactId

            from components.java
        }
    }
}

如果您要更改多个项目名称,也可以添加一个开关。

publishing {
    publications {
        maven(MavenPublication) {

            //adding switch
            switch(artifactId) {
                case 'first-project-original-name':
                    artifactId = 'my-first-specific-name'
                    break
                case 'second-project-original-name':
                    artifactId = 'my-second-specific-name'
                    break
                default:
                    break
            }

            from components.java
        }
    }
}