web-dev-qa-db-fra.com

Comment définir l'identifiant d'artefact maven d'un projet Gradle?

Dans la documentation du plugin gradle maven-publish , il est clair que vous définissez les groupId et version du projet directement dans build.gradle:

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

Cependant, la artifactId semble provenir du nom du dossier dans lequel vous travaillez. Est-il possible de définir explicitement la artifactId?

60
Armand

De 36.2.3. Valeurs d'identité dans le POM généré

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

            from components.Java
        }
    }
}

Par défaut, l'ID d'artefact est le nom du projet configuré dans settings.gradle, qui à son tour utilise le nom du répertoire du projet.

61
Peter Niederwieser

C'est la bonne réponse pour maven-publish plugin. Il s’agit du successeur de l’ancien maven plugin.

Si, comme moi, vous êtes coincé avec l'ancien plug-in, la réponse correcte à "Comment définir l'identifiant d'artefact maven pour un projet de dégradé" est:

uploadArchives {
    repositories {
        mavenDeployer {
            pom.artifactId = 'project-sample'
        }
    }
}
6
Matthew Mark Miller

En relation avec le fichier racine settings.gradle, vous pouvez modifier le nom du projet racine avec:

rootProject.name = 'myproject'

Mais si vous voulez changer le nom d'un sous-projet (par exemple, le sous-projet "app" par défaut d'un projet AndroidStudio), vous pouvez faire quelque chose comme ceci, toujours dans le fichier racine settings.gradle:

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

Si vous avez un projet multi-module et que vous voulez que les noms des artefacts diffèrent de ceux de Directory (défini dans settings.gradle), je pense qu'une meilleure approche consiste à disposer d'un bloc jar pour chaque sous-projet et là vous pouvez écrire le nom de base, qui sera l'identifiant d'artefact. Ensuite, plutôt que de ré-écrire le bloc publishing/publications pour chaque sous-projet, vous ne l'écrivez qu'une fois dans le fichier principal build.gradle de cette façon:

pour chaque sous-projet build.gradle:

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

dans le build.gradle principal:

publishing {
    publications {
        mavenJava(MavenPublication) {
           artifactId jar.baseName
           from components.Java
        }
    }
}
4
OhadR

Cependant, artifactId semble provenir du nom du dossier dans lequel vous travaillez. Existe-t-il un moyen de définir explicitement artifactId?

Une solution simple consiste à définir le jar.baseName qui remplace ensuite le nom du répertoire.

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

Cela semble fonctionner pour moi.

2
Gray

Dans Gradle , vous pouvez définir jar.archiveName pour remplacer le nom du dossier de travail ...

group = 'com.example'
version = '0.0.1-SNAPSHOT'
jar.archiveName = "myproject-0.0.1-SNAPSHOT.jar"
0
nobar

Pour construire Android et publier sur artifactory à l'aide de Jenkins, j'ai configuré les paramètres ci-dessous dans les modules de l'application build.gradle pour configurer l'identifiant de groupe, l'identifiant d'artefact et la version.

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

    }
0
ChinLoong