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.