¿Cómo se configura el ID de artefacto maven de un proyecto de Gradle?

85

De la documentación del complemento gradle maven-publish , está claro que configura el groupIdy versiondel proyecto directamente en build.gradle:

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

Sin embargo, artifactIdparece que se toma del nombre de la carpeta en la que está trabajando. ¿Hay alguna forma de establecer artifactIdexplícitamente?

Armand
fuente

Respuestas:

85

Desde 36.2.3. Valores de identidad en el POM generado

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

            from components.java
        }
    }
}

El ID de artefacto tiene como valor predeterminado el nombre del proyecto configurado en settings.gradle, que a su vez toma como valor predeterminado el nombre del directorio del proyecto.

Necesitará el complemento adecuado.

plugins {
    id 'maven-publish'
}
Peter Niederwieser
fuente
Hola Peter, gracias por la respuesta. Mirando la documentación a la que he vinculado, que también es 65.4, obviamente tenemos diferentes versiones del documento.
Armand
Ah, está en 65.2.3 del 2.0 doc. Obviamente, mi capacidad de comprensión es pobre; No sé cómo me perdí esto al buscar en la página 'artefacto': disculpas.
Armand
Es el ejemplo 65.4 en el capítulo al que se vinculó.
Peter Niederwieser
13
Si desea cambiar el nombre del proyecto (que es una especie de pregunta separada), puede hacerlo en settings.gradle(por ejemplo rootProject.name = "something").
Peter Niederwieser
2
Importante: La configuración del nombre del proyecto en settings.gradle (por ejemplo, rootProject.name = "org.myorg.myproject") fue fundamental para solucionar los problemas en los que la compilación de Jenkins se cargaba a un groupId con el nombre predeterminado de la carpeta del espacio de trabajo de Jenkins.
Farrukh Najmi
16

En relación con el settings.gradlearchivo raíz , puede cambiar el nombre del proyecto raíz con:

rootProject.name = 'myproject'

Pero si desea cambiar el nombre de un subproyecto (por ejemplo, el subproyecto de "aplicación" predeterminado de un proyecto de AndroidStudio), puede hacer algo como esto, aún en el settings.gradlearchivo raíz :

rootProject.children.each {
    it.name = ('app' == it.name ? 'MyAppName' : it.name)
}
Alex Dommasch
fuente
Como lo menciona @FarrukhNajmi en un comentario, agregar rootProject.name en el archivo settings.gradle evita que artifactID se convierta en el nombre del trabajo de Jenkins cuando se compila con Jenkins.
Forraje
8

Esta es la respuesta correcta para el complemento maven-publish . Esto está destinado a ser el sucesor del antiguo complemento maven .

Si, como yo, está atascado con el complemento anterior, la respuesta correcta a "¿Cómo configuro el id. De artefacto de maven para un proyecto gradle" es:

uploadArchives {
    repositories {
        mavenDeployer {
            pom.artifactId = 'project-sample'
        }
    }
}
Matthew Mark Miller
fuente
3
Esta es una mala idea. Hacerlo aquí significa que cualquier dependencia que haya declarado contra el proyecto relativamente desde otro lugar no obtendrá el artifactId correcto cuando se genere un pom para ellos.
kebernet
No recuerdo que esto sea cierto (han pasado 18 meses desde que me ocupé de esto), pero si es así, la respuesta correcta es actualizar su complemento maven al nuevo con el mejor modelo. ¡Gracias!
Matthew Mark Miller
6

Si tiene un proyecto de varios módulos y desea que los nombres de los artefactos difieran del Directorio (que se establece en settings.gradle), creo que un mejor enfoque es tener un bloque jar para cada subproyecto, y allí puede escribir el baseName, que será el artifact-id. Luego, en lugar de volver a escribir el bloque de publicación / publicaciones para cada subproyecto, lo escribe solo una vez en el build.gradle principal de esta manera:

para cada subproyecto build.gradle:

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

en el build.gradle principal:

publishing {
    publications {
        mavenJava(MavenPublication) {
           artifactId jar.baseName
           from components.java
        }
    }
}
OhadR
fuente
No se pudo encontrar el método jar () para los argumentos
Invierno
2

Para compilar Android y publicar en artifactory usando jenkins, configuré las siguientes opciones en build.gradle de los módulos de la aplicación para configurar la identificación del grupo, la identificación del artefacto y la versión.

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

    }
ChinLoong
fuente
archivesBaseName sin efecto
act262
En versiones más recientes de Gradle / Android, encuentro que hay un método setArchivesBaseName () proporcionado por BasePluginConvention que está disponible en lugar de asignación directa, y me funciona en el complemento de Android Gradle 3.1.4 y Gradle 4.10.2 . docs.gradle.org/current/javadoc/org/gradle/api/plugins/…
John Michelau
2

Sin embargo, el artifactId parece tomarse del nombre de la carpeta en la que está trabajando. ¿Hay alguna forma de establecer artifactId explícitamente?

Una respuesta simple a esto es configurar el jar.baseNameque luego anula el nombre del directorio.

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

Esto parece funcionar para mí.

gris
fuente
1

En Gradle , puede configurar jar.archiveNamepara anular el uso del nombre de la carpeta de trabajo ...

group = 'com.example'
version = '0.0.1-SNAPSHOT'
jar.archiveName = "myproject-0.0.1-SNAPSHOT.jar"
Brent Bradburn
fuente