Gradle: obtener la última versión de lanzamiento de una dependencia

93

¿Cuál sería la forma más sencilla de decir Gradlelo siguiente?

Recupere la dependencia 'junit' y tome su última versión de 'lanzamiento'.

Administrar los repositorios de Maven e Ivy es algo nuevo para mí. Intenté los siguientes pasos y dieron como resultado un Could not resolve dependency ...error:

  • Escribir compile "junit:junit:latest.release"con repositorios configurados en solo mavenCentral() (sin embargo, funciona si digo "junit: junit: 4.10").

  • Escriba compile "junit:junit:latest.release"con el repositorio configurado de la siguiente manera:

    ivy {
        // I also tried 'http://maven.org' and other possible variants.           
        url "http://repo1.maven.org" 
        layout "maven"
    }
  • Intenté usar el repositorio Spring Source Ivy:

    ivy {
        artifactPattern "http://repository.springsource.com/ivy/libraries/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
        ivyPattern "http://repository.springsource.com/ivy/libraries/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
    }

Quizás malinterprete algo. ¿Por qué sería una tarea tan difícil obtener la última versión de la dependencia?

Yippie-Ki-Yay
fuente
La versión dinámica puede ser un marcador de posición para la última versión disponible latest.integration,. Documentación de gradle para versiones dinámicas
Bhavik

Respuestas:

48

Gradle actualmente no es compatible con Maven RELEASE(que rara vez se usa y está desaprobado) pero sí es compatible con Ivy latest.release. Sin embargo, la recomendación general es construir con versiones exactas. De lo contrario, la construcción puede convertirse en una lotería.

Peter Niederwieser
fuente
Maven tampoco es compatible con RELEASE. Solo números de versión fijos.
khmarbaise
10
Lo he comprobado dos veces. Maven es compatible RELEASE, tanto en la versión 2 como en la 3.
Peter Niederwieser
Tienes razón. Me he confundido con las versiones del complemento, porque para Maven 3 ya no permite RELEASE / LATEST. Pero, por supuesto, es una mala práctica utilizar este tipo de identificadores de versión.
khmarbaise
Un artefacto en un repositorio de versiones de Maven es aquel que ha completado todas las pruebas automatizadas (y quizás manuales) posibles. Ese proceso debe incluir comprobaciones de compatibilidad de API, pruebas de regresión, etc. Entonces, ¿por qué la construcción puede convertirse en una lotería? Solo si está "liberando" artefactos que no han sido suficientemente probados.
RCross
2
Grade admite 'latest.release' (pero no 'RELEASE'). Esto es extremadamente útil para garantizar que sus propias bibliotecas internas tengan la versión más reciente y probada; por supuesto, nunca recomendaría su uso para bibliotecas externas / de terceros por la misma razón que Peter sugiere anteriormente.
RCross
257

En ocasiones, puede resultar muy útil obtener la última versión, si, por ejemplo, publica con frecuencia sus propias dependencias.

Puede obtener la última versión como

compile "junit:junit:+"

o mejor especificar al menos la versión principal como

compile "junit:junit:4.+"
jmruc
fuente
27
solo para el registro: ¡eso debería ser comillas dobles! He estado usando comillas simples para la mayoría de mis declaraciones de dependencia y descubrí que code 'junit:junit:4.+'no funciona
azonli
1
@azonli Parece funcionar para mí con comillas simples, al menos para dependencias locales. ¿Qué error obtienes?
David Moles
3
¿No debería ser "testCompile" en lugar de "compilar"? porque el artefacto no es necesario en un lanzamiento
Martin Dürrmeier
6
No siempre necesitas una construcción reproducible.
Lakatos Gyula
2
@SimonForsberg ... Es cierto, sin embargo, cuando está en desarrollo, es posible que desee (a) seguir la vanguardia o (b) asegurarse de que las correcciones de errores para v 4.+se mantengan actualizadas para su proyecto. Cuando llegue a la etapa Alfa, Beta, -RC o -RELEASE; Estoy totalmente de acuerdo en que necesitas ' clavar ' esas versiones en un poste. Yo uso una properties' file to set version specifiers: compilación "junit: junit: $ { junitVer }" `.
será el
25

Consulte el complemento de versiones de Gradle. Hace exactamente lo que quieres: https://github.com/ben-manes/gradle-versions-plugin

Para la instalación, consulte la página de github. Básicamente, debe agregar estas dos líneas a su archivo de proyecto build.gradle:

apply plugin: 'com.github.ben-manes.versions'

buildscript {
    [...]
    dependencies {
        classpath 'com.github.ben-manes:gradle-versions-plugin:0.8'
        [...]
    }
}
[...]

Luego puede usar el complemento, ejecutando este comando en la terminal en el directorio de su proyecto:

./gradlew dependencyUpdates -Drevision=release

¡Y le mostrará qué dependencias están desactualizadas!

electronix384128
fuente
También puede agregar esto a un initscript si no desea tener que incluir el complemento en cada uno de sus proyectos. Consulte esta respuesta a otra pregunta para obtener más detalles.
Laurence Gonsalves
¿Qué pasa si las dependencias están en el mismo repositorio y siempre desea la última versión?
Barry Kelly
8

La última guía del usuario de Gradle menciona y explica las versiones de inicio de sesión más:

Desde 7.2. Declarando sus dependencias :

dependencies {
    compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

... El script de compilación también indica que se requiere cualquier junit> = 4.0 para compilar las pruebas del proyecto.

Desde el 23.7. Cómo funciona la resolución de dependencias :

Si la dependencia se declara como una versión dinámica (como 1. +), Gradle resolverá esto a la versión estática más nueva disponible (como 1.2) en el repositorio. Para los repositorios de Maven, esto se hace usando el archivo maven-metadata.xml, mientras que para los repositorios de Ivy esto se hace mediante la lista de directorios.

RunninglVlan
fuente
1
Sugerencia importante: el + no necesariamente toma la última versión. Vea mi comentario arriba.
Harry G.
3

En Android Studio:

Si está utilizando +para la versión y desea saber qué versión se está utilizando realmente , seleccione Projecten la barra lateral y, a continuación External Libraries, verá el número de versión real en uso.

lenooh
fuente
¿Se refiere a un IDE específico? :-)
Inego
Inego: sí, lo agregué a la respuesta ;-)
lenooh