106

从 gradle maven-publish 插件的文档中,很明显您将项目的groupIdandversion直接设置在build.gradle

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

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

4

9 回答 9

104

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'
}
于 2014-07-18T14:46:47.483 回答
17

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

rootProject.name = 'myproject'

但是如果你想更改一个子项目的名称(例如,AndroidStudio 项目的默认“app”子项目),你可以这样做,仍然在根settings.gradle文件中:

rootProject.children.each {
    it.name = ('app' == it.name ? 'MyAppName' : it.name)
}
于 2016-03-25T21:25:48.207 回答
8

这是maven-publish插件的正确答案。这旨在作为旧maven插件的继任者。

如果像我一样,您被旧插件卡住了,那么“如何为 gradle 项目设置 maven 工件 id”的正确答案是:

uploadArchives {
    repositories {
        mavenDeployer {
            pom.artifactId = 'project-sample'
        }
    }
}
于 2016-02-12T19:41:30.573 回答
7

如果您有一个多模块项目,并且您希望工件的名称不同于目录(在 settings.gradle 中设置),那么我认为更好的方法是为每个子项目设置一个 jar 块,在那里你可以写出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
        }
    }
}
于 2016-04-05T04:59:36.180 回答
3

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

    }
于 2016-09-05T02:36:48.513 回答
2

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

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

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

这似乎对我有用。

于 2018-06-22T17:07:06.243 回答
1

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

group = 'com.example'
version = '0.0.1-SNAPSHOT'
jar.archiveName = "myproject-0.0.1-SNAPSHOT.jar"
于 2017-09-25T00:51:56.407 回答
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
        }
    }
}
于 2021-05-31T20:35:49.090 回答
0

这就是我为我的 Android 库所做的。它在 Kotlin DSL (build.gradle.kts) 中:

plugins {
    id("maven-publish")
    // ...
}

afterEvaluate {
    publishing {
        publications {
            create<MavenPublication>("Release") {
                // ...
                groupId = "ir.mahozad.android"
                artifactId = "pie-chart"
                version = project.version.toString()
                artifact(sourcesArtifact)
                artifact(javadocArtifact)
                // ...
            }
        }
    }
}

您可以在此处查看完整的构建脚本文件

在此处查看类似的答案

于 2022-02-12T17:57:58.517 回答