Як встановити ідентифікатор артефакту maven проекту gradle?


85

З документації плагіна gradle maven- публіка видно, що ви groupIdі versionпроект встановили безпосередньо в build.gradle:

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

Однак, artifactIdсхоже, це взято з назви папки, в якій ви працюєте. Чи є спосіб встановити artifactIdявний?

Відповіді:


85

З 36.2.3. Значення ідентичності в створеному POM

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

            from components.java
        }
    }
}

Ідентифікатор артефакту за замовчуванням відповідає імені проекту, налаштованому в settings.gradle, яке, у свою чергу, за замовчуванням відповідає імені каталогу проекту.

Вам знадобиться відповідний плагін.

plugins {
    id 'maven-publish'
}

Привіт Петре, дякую за відповідь. Переглядаючи документацію, на яку я посилався, а це також 65.4, ми, очевидно, маємо різні версії документа.
— Арманд

Ах, це в 65.2.3 документації 2.0. Мої навички розуміння, очевидно, погані; Не знаю, як я це пропустив, шукаючи на сторінці "артефакт" - вибачення.
— Арманд

Це приклад 65.4 у розділі, до якого ви зв’язали.
— Peter Niederwieser

13
Якщо ви хочете змінити назву проекту (що є окремим запитанням), ви можете зробити це в settings.gradle(наприклад rootProject.name = "something").
— Петер Нідервізер

2
Важливо: Встановлення імені проекту в settings.gradle (наприклад, rootProject.name = "org.myorg.myproject") було критично важливим для виправлення проблем, коли збірка Jenkins завантажувалась за замовчуванням до імені папки робочої області Jenkins за замовчуванням.
— Farrukh Najmi

16

Що стосується кореневого settings.gradleфайлу, ви можете змінити назву кореневого проекту за допомогою:

rootProject.name = 'myproject'

Але якщо ви хочете змінити назву підпроекту (наприклад, підпроект "додаток" за замовчуванням проекту AndroidStudio), ви можете зробити щось подібне, все ще у кореневому settings.gradleфайлі:

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

Як згадував @FarrukhNajmi в коментарі, додавання rootProject.name у файл settings.gradle зупиняє артефакт-ідентифікацію як ім'я завдання Дженкінса під час створення з Jenkins.
— Корм

8

Це правильна відповідь для плагіна maven- publishing. Він призначений наступником старого плагіна maven .

Якщо, як і я, ви застрягли у старішому плагіні, правильна відповідь на питання "Як встановити ідентифікатор артефакту maven для проекту gradle":

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

3
Це погана ідея. Якщо ви зробите це тут, це означає, що будь-які залежності, які ви оголосили щодо проекту відносно з інших місць, не отримають правильного артефакту, коли для них буде створено пом.
— kebernet

Я не пам’ятаю, що це було правдою (з того часу, як я з цим розібрався, минуло 18 місяців), але якщо так, то правильною відповіддю є оновлення вашого плагіна maven до нового з кращою моделлю. Дякую!
— Метью Марк Міллер

6

Якщо у вас є багатомодульний проект, і ви хочете, щоб імена артефактів відрізнялися від каталогу (який встановлений у settings.gradle), тоді, на мою думку, кращим підходом є наявність блоку jar для кожного підпроекту, і там ви можете написати baseName, яке буде ідентифікатором артефакту. Потім, замість того, щоб переписувати блок публікації / публікації для кожного підпроекту, ви пишете його лише один раз у головному 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
        }
    }
}

Не вдалося знайти метод jar () для аргументів
— Зима

2

Для побудови android та публікації в артефакторії за допомогою jenkins я налаштував наведені нижче параметри в модулі програми build.gradle для налаштування ідентифікатора групи, ідентифікатора артефакту та версії.

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 ніякого ефекту
— акт262

У більш пізніх версіях Gradle / Android я виявляю, що існує метод setArchivesBaseName (), наданий BasePluginConvention, який доступний замість прямого призначення, і він працює для мене на плагіні Android Gradle 3.1.4 та Gradle 4.10.2 . docs.gradle.org/current/javadoc/org/gradle/api/plugins/…
— Джон

2

Однак артефактId, здається, взятий з імені папки, в якій ви працюєте. Чи є спосіб встановити артефактId явно?

Проста відповідь на це - встановити значення, 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"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.