Come si imposta l'ID artefatto Maven di un progetto gradle?


89

Dalla documentazione del plug-in gradle maven -publish , è chiaro che hai impostato il groupIde versiondel progetto direttamente in build.gradle:

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

Tuttavia, artifactIdsembra essere preso dal nome della cartella in cui stai lavorando. C'è un modo per impostare artifactIdesplicitamente?

Risposte:


87

Dal 36.2.3. Valori di identità nel POM generato

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

            from components.java
        }
    }
}

L'ID artefatto ha come valore predefinito il nome del progetto configurato in settings.gradle, che a sua volta ha come impostazione predefinita il nome della directory del progetto.

Avrai bisogno del plug-in appropriato.

plugins {
    id 'maven-publish'
}

Ciao Peter, grazie per la risposta. Guardando la documentazione a cui mi sono collegato, che è anche la 65.4, ovviamente abbiamo diverse versioni del documento.
Armand

Ah, è in 65.2.3 del documento 2.0. Le mie capacità di comprensione sono ovviamente scarse; Non so come mi sia sfuggito durante la ricerca nella pagina di "artefatto" - scuse.
Armand

È l' esempio 65.4 nel capitolo a cui ti sei collegato.
Peter Niederwieser

13
Se vuoi cambiare il nome del progetto (che è una specie di domanda separata), puoi farlo in settings.gradle(es rootProject.name = "something".).
Peter Niederwieser

2
Importante: l'impostazione del nome del progetto in settings.gradle (ad esempio rootProject.name = "org.myorg.myproject") era fondamentale per risolvere i problemi in cui la build di Jenkins veniva caricata su un nome di cartella dello spazio di lavoro di Jenkins basato su groupId.
Farrukh Najmi

16

In relazione al settings.gradlefile root , puoi modificare il nome del progetto root con:

rootProject.name = 'myproject'

Ma se vuoi cambiare il nome di un sottoprogetto (ad esempio, il sottoprogetto "app" predefinito di un progetto AndroidStudio), puoi fare qualcosa del genere, sempre nel settings.gradlefile root :

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

Come menzionato da @FarrukhNajmi in un commento, l'aggiunta di rootProject.name nel file settings.gradle impedisce che artifactID diventi il ​​nome del lavoro di Jenkins quando si costruisce con Jenkins.
Fodder

8

Questa è la risposta corretta per il plug -in di pubblicazione maven. Questo è inteso come il successore del vecchio plugin Maven .

Se, come me, sei bloccato con il plugin più vecchio, la risposta corretta a "Come faccio a impostare l'id artefatto Maven per un progetto gradle" è:

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

3
Questa è una cattiva idea. Farlo qui significa che qualsiasi dipendenza dichiarata rispetto al progetto relativamente da qualche altra parte non otterrà l'ID artefatto corretto quando viene generato un pom per loro.
kebernet

Non ricordo che sia vero (sono passati 18 mesi da quando mi sono occupato di questo) ma se è così la risposta corretta è aggiornare il tuo plugin Maven a quello nuovo con il modello migliore. Grazie!
Matthew Mark Miller

6

Se hai un progetto multi-modulo e vuoi che i nomi degli artefatti differiscano dalla Directory (che è impostata in settings.gradle), allora penso che un approccio migliore sia quello di avere un blocco jar per ogni sotto-progetto, e lì puoi scrivere baseName, che sarà l'artefatto-id. Quindi, invece di riscrivere il blocco di pubblicazione / pubblicazioni per ogni sottoprogetto, lo scrivi solo una volta nel build.gradle principale in questo modo:

per ogni sottoprogetto build.gradle:

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

nel build.gradle principale:

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

Impossibile trovare il metodo jar () per gli argomenti
Inverno

2

Per la creazione di Android e la pubblicazione su artifactory utilizzando jenkins, ho configurato le impostazioni di seguito nel build.gradle dei moduli dell'app per configurare l'ID del gruppo, l'ID artefatto e la versione.

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 nessun effetto
act262

Nelle versioni più recenti di Gradle / Android, sto scoprendo che esiste un metodo setArchivesBaseName () fornito da BasePluginConvention che è disponibile al posto dell'assegnazione diretta e funziona per me su Android Gradle plugin 3.1.4 e Gradle 4.10.2 . docs.gradle.org/current/javadoc/org/gradle/api/plugins/…
John Michelau

2

Tuttavia, artifactId sembra essere preso dal nome della cartella in cui stai lavorando. C'è un modo per impostare l'ID artifact in modo esplicito?

Una semplice risposta a questo è impostare il jar.baseNameche sovrascrive il nome della directory.

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

Questo sembra funzionare per me.


1

In Gradle , puoi impostare jar.archiveNamel'override dell'uso del nome della cartella di lavoro ...

group = 'com.example'
version = '0.0.1-SNAPSHOT'
jar.archiveName = "myproject-0.0.1-SNAPSHOT.jar"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.