Jak ustawić identyfikator artefaktu Mavena projektu Gradle?


85

Z dokumentacji wtyczki gradle maven-publikuj jasno wynika, że ​​ustawiasz groupIdand versionprojektu bezpośrednio w build.gradle:

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

artifactIdWygląda jednak na to, że pochodzi z nazwy folderu, w którym pracujesz. Czy istnieje sposób, aby ustawić to artifactIdjawnie?

Odpowiedzi:


85

Od 36.2.3. Wartości tożsamości w wygenerowanym POM

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

            from components.java
        }
    }
}

Identyfikator artefaktu domyślnie odpowiada nazwie projektu skonfigurowanej w programie settings.gradle, która z kolei domyślnie jest nazwą katalogu projektu.

Będziesz potrzebować odpowiedniej wtyczki.

plugins {
    id 'maven-publish'
}

Cześć Peter, dzięki za odpowiedź. Patrząc na dokumentację, do której linkowałem, która również ma numer 65.4, oczywiście mamy różne wersje tego dokumentu.
— Armand,

Ach, jest w 65.2.3 dokumentu 2.0. Moje umiejętności rozumienia są oczywiście słabe; Nie wiem, jak to przegapiłem, szukając na stronie „artefaktu” - przepraszam.
— Armand

To przykład 65.4 w rozdziale, do którego prowadziło łącze.
— Peter Niederwieser

13
Jeśli chcesz zmienić nazwę projektu (co jest rodzajem osobnego pytania), możesz to zrobić w settings.gradle(np rootProject.name = "something".).
— Peter Niederwieser

2
Ważne: Ustawienie nazwy projektu w settings.gradle (np. RootProject.name = "org.myorg.myproject") było krytyczne dla naprawienia problemów związanych z przesyłaniem kompilacji Jenkins do opartego na groupId domyślnej nazwy folderu obszaru roboczego Jenkins.
— Farrukh Najmi

16

W odniesieniu do settings.gradlepliku głównego możesz zmienić nazwę projektu głównego za pomocą:

rootProject.name = 'myproject'

Ale jeśli chcesz zmienić nazwę projektu podrzędnego (na przykład domyślnego projektu podrzędnego „app” w projekcie AndroidStudio), możesz zrobić coś takiego, nadal w settings.gradlepliku głównym :

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

Jak wspomniał @FarrukhNajmi w komentarzu, dodanie rootProject.name w pliku settings.gradle powoduje, że artefactID nie staje się nazwą zadania Jenkinsa podczas budowania z Jenkins.
— Pasza

8

To jest poprawna odpowiedź dla wtyczki maven-opublikuj . Ma to być następca starszej wtyczki maven .

Jeśli tak jak ja utkniesz ze starszą wtyczką, poprawna odpowiedź na pytanie „Jak ustawić identyfikator artefaktu mavena dla projektu Gradle” to:

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

3
To jest zły pomysł. Zrobienie tego w tym miejscu oznacza, że ​​wszelkie zależności, które zadeklarowałeś względem projektu względnie z innego miejsca, nie otrzymają prawidłowego artefactId, gdy zostanie dla nich wygenerowany pom.
— kebernet

Nie przypominam sobie, żeby to było prawdą (minęło 18 miesięcy, odkąd się tym zajmowałem), ale jeśli tak, poprawną odpowiedzią jest uaktualnienie wtyczki maven do nowej z lepszym modelem. Dziękuję Ci!
— Matthew Mark Miller

6

Jeśli masz projekt wielomodułowy i chcesz, aby nazwy artefaktów różniły się od katalogu (który jest ustawiony w pliku settings.gradle), myślę, że lepszym podejściem jest posiadanie bloku słoika dla każdego podprojektu, i tam możesz napisać baseName, który będzie identyfikatorem artefaktu. Następnie, zamiast ponownie pisać blok publikacji / publikacji dla każdego podprojektu, piszesz go tylko raz w głównej kompilacji.gradle w ten sposób:

dla każdego projektu podrzędnego build.gradle:

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

w głównym pliku build.gradle:

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

Nie można znaleźć metody jar () dla argumentów
— zima

2

W przypadku kompilowania systemu Android i publikowania w Artifactory przy użyciu Jenkinsa skonfigurowałem poniższe ustawienia w pliku build.gradle modułów aplikacji do konfigurowania identyfikatora grupy, identyfikatora artefaktu i wersji.

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 bez efektu
— act262

W nowszych wersjach Gradle / Android stwierdzam, że istnieje metoda setArchivesBaseName () udostępniana przez BasePluginConvention, która jest dostępna zamiast bezpośredniego przypisania i działa w przypadku wtyczki Android Gradle 3.1.4 i Gradle 4.10.2 . docs.gradle.org/current/javadoc/org/gradle/api/plugins/…
— John Michelau

2

Jednak wydaje się, że artifactId pochodzi z nazwy folderu, w którym pracujesz. Czy istnieje sposób, aby jawnie ustawić artifactId?

Prostą odpowiedzią na to jest ustawienie tego, jar.baseNamektóry następnie zastępuje nazwę katalogu.

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

To wydaje się działać dla mnie.


1

W Gradle możesz ustawić, jar.archiveNameaby nadpisać użycie nazwy folderu roboczego ...

group = 'com.example'
version = '0.0.1-SNAPSHOT'
jar.archiveName = "myproject-0.0.1-SNAPSHOT.jar"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.