GradleプロジェクトのMavenアーティファクトIDをどのように設定しますか?


85

Gradleのからのmaven-公開プラグインのドキュメント、それはあなたが設定されていることは明らかだgroupIdversionで直接プロジェクトbuild.gradle

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

ただし、artifactIdは作業中のフォルダの名前から取得されているようです。artifactId明示的に設定する方法はありますか?

回答:


85

36.2.3から。生成されたPOMのID値

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)を見ると、明らかに異なるバージョンのドキュメントがあります。
アルマンド

ああ、それは2.0ドキュメントの65.2.3にあります。私の理解力は明らかに貧弱です。ページで「アーティファクト」を検索したときに、これをどのように見逃したのかわかりません-お詫びします。
アルマンド

リンク先の章の65.4です。
Peter Niederwieser 2014

13
プロジェクト名を変更したい場合(これは別の質問の一種です)、settings.gradle(eg rootProject.name = "something")で変更できます。
Peter Niederwieser 2014

2
重要:settings.gradleでプロジェクト名を設定すること(たとえば、rootProject.name = "org.myorg.myproject")は、JenkinsビルドがグループIDベースのデフォルトでJenkinsワークスペースフォルダー名にアップロードされる問題を修正するために重要でした。
FarrukhNajmi19年

16

ルートsettings.gradleファイルに関連して、ルートプロジェクトの名前を次のように変更できます。

rootProject.name = 'myproject'

ただし、サブプロジェクト(たとえば、AndroidStudioプロジェクトのデフォルトの「app」サブプロジェクト)の名前を変更する場合は、ルートsettings.gradleファイルで次のようにすることができます。

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

@FarrukhNajmiがコメントで述べているように、settings.gradleファイルにrootProject.nameを追加すると、JenkinsでビルドするときにartifactIDがJenkinsジョブ名になるのを防ぎます。
飼料

8

これは、maven-publishプラグインの正解です。これは、古いMavenプラグインの後継として意図されています。

私のように、古いプラグインで立ち往生している場合、「gradleプロジェクトのMavenアーティファクトIDを設定するにはどうすればよいですか」に対する正解は次のとおりです。

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

3
これは悪い考えです。ここでそれを行うと、他の場所から比較的プロジェクトに対して宣言した依存関係は、pomが生成されたときに正しいartifactIdを取得しないことを意味します。
kebernet 2017年

私はこれが真実であることを思い出しません(私がこれを扱ってから18か月が経ちました)が、もしそうなら、正しい答えはあなたのmavenプラグインをより良いモデルの新しいプラグインにアップグレードすることです。ありがとうございました!
マシューマークミラー

6

マルチモジュールプロジェクトがあり、アーティファクトの名前をディレクトリ(settings.gradleで設定)とは異なるものにしたい場合は、サブプロジェクトごとにjarブロックを用意することをお勧めします。そこで、アーティファクトIDとなるbaseNameを記述できます。次に、サブプロジェクトごとにpublishing / publicationsブロックを書き直すのではなく次のようにメインのbuild.gradleに1回だけ書き込みます。

サブプロジェクト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

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

    }

archivesBaseName効果なし
act262 2018年

Gradle / Androidの最近のバージョンでは、直接割り当ての代わりに使用できるBasePluginConventionによって提供されるsetArchivesBaseName()メソッドがあり、AndroidGradleプラグイン3.1.4およびGradle4.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"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.