Publicar Snapshot vs Publicar Release en Gradle Con Integración Continua


Estoy aprendiendo Gradle, viniendo de un fondo de Ant+Ivy y Maven y estoy tratando de envolver mi cabeza alrededor de la forma correcta de publicar una versión de lanzamiento de mi software usando gradle. También necesito integrar constantemente mis proyectos sin tener que liberar constantemente artefactos independientes.

Ant + Ivy

En el mundo de Ant + Ivy, puedo crear objetivos publishSnapshot y publishRelease. Cada uno de ellos puede usar diferentes resolutores Ivy para resolver y publicar en mis repositorios de snapshot o release separados en Nexus.

Maven

Con Maven, puedo definir un snapshotRepository o repository en mi sección distributionManagement para que maven publique en mis repositorios de snapshots o releases separados en Nexus.

Gradle

Ahora entra en gradle. ¿Cómo puedo lograr esta misma funcionalidad? Estoy usando repositorios de estilo ivy.

Gracias por cualquier información que pueda proporcionar.

RESPUESTA

Gracias a la respuesta de René a continuación, finalmente pude crear una solución viable. El quid de la cuestión era que necesitaba integrarme constantemente en todos mis proyectos. Para hacer esto pensé que declarar una dependencia usando el número de versión latest.integration era la única manera de obtener la última versión de mis bibliotecas, y por lo tanto necesitaba usar repositorios de estilo ivy.

De hecho, hay otras formas de obtener la última versión de las bibliotecas para integrar continuamente mi software en todos los proyectos. El la solución es usar el uploadArchives exactamente como René ha enumerado a continuación (también tenga en cuenta que necesitará apply plugin: 'maven' para que esto funcione. Asegúrese de que sus repositorios también sean de estilo maven, y al declarar una dependencia, puede usar números de versión dinámicos como se muestra aquí. En mi caso, he enumerado un número de versión global en mi común.gradle y en proyectos descendentes, utilicé version: version para hacer referencia a la variable versión global. De esta manera, cada artefacto en mi sistema tiene la misma versión. Cuando es el momento de release, puedo cambiar esto de 1.0-SNAPSHOT a 1.0 y construir cada uno en orden.

Author: Community, 2013-05-25

2 answers

Puede configurar el snapshot y el repositorio release en la tarea' Upload ' (por ejemplo, la tarea uploadArchives):

uploadArchives {  
    repositories {  
        mavenDeployer {  
            repository(url: 'http://myCompanyRepo.com:8081/releases') {  
                authentication(userName: 'admin', password: 'password');  
            }  
            snapshotRepository(url: 'http://myCompanyRepo.com:8081/snapshots') {
                authentication(userName: 'admin', password: 'password');  
            }  
        }  
    }  
}

Para las versiones *-SNAPSHOT se usa snapshotRepository. De lo contrario, se utiliza el repositorio releases.

 46
Author: Rene Groeschke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-24 10:02:56

Si quieres usar el nuevo plugin maven-publish, puedes subirlo a diferentes repositorios usando una instrucción if:

apply plugin: 'maven-publish'

...

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
    repositories {
        maven {
            credentials {
                username "anonymous"
            }

            if(project.version.endsWith('-SNAPSHOT')) {
                url "http://example/artifactory/libs-snapshot-local"
            } else {
                url "http://example/artifactory/libs-release-local"
            }
        }
    }
}

Referencia: maven-publicar y establecer snapshotRepository y releaseRepository

 40
Author: Paolo Fulgoni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-24 10:04:11