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.