2013-02-20 14 views
23

Sto cercando di capire come Gradle gestisce le versioni di dipendenza con un segno '+' come si vede nell'esempio 8.1 qui: http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.htmlGradle versioni di dipendenza segno '+'

testCompile group: 'junit', name: 'junit', version: '4.+ 

La documentazione afferma che questo otterrà una versione di junit> = 4.0. Come ottenere una versione di una dipendenza maggiore di (o uguale a), ad esempio, 5.10? Sarebbe 5.10+ o 5.1+? Il primo sembra non funzionare correttamente, ma il secondo lo fa. Come ottengo una dipendenza maggiore o uguale a 1,22? 1.2+? In questo scenario, se la versione 1.21 esiste ed è l'ultima versione, mi piacerebbe fallire, dal momento che voglio maggiore o uguale a 1,22, ma 1.2+ cercherà> = 1.20. Come posso specificarlo? È possibile? Non riesco a trovare più documentazione su di esso.

Modifica: tendo a pensare ad esso come 1.2+ equivale a 1.2([0-9]+). È questo il modo corretto di pensare?

risposta

22

In questo scenario, se la versione 1.21 esiste ed è la versione più recente, mi piacerebbe fallire, perché voglio maggiore o uguale a 1,22, ma 1.2+ cercherà> = 1.20. Come posso specificarlo? È possibile?

Non credo che ci sia alcuna documentazione su questo, ma dal momento che Gradle originariamente utilizzato Ivy sotto il cofano per tutta la sua funzionalità di gestione delle dipendenze, ho preso uno sguardo alla documentazione di Ivy per quanto riguarda le versioni dinamiche:

http://ant.apache.org/ivy/history/latest-milestone/ivyfile/dependency.html

Ha solo poco più della documentazione Gradle. Ho provato a sperimentare in Gradle con versione in stile Ivy gamme:

compile group: 'log4j', name: 'log4j', version: '[1.2.12,1.2.17]' 

e sorprendentemente sembra di volte lavoro a seconda di ciò che la gamma di versioni è. Nell'esempio sopra risolto su 1.2.17.

So che questo non risponde completamente alle vostre domande (che anch'io sono curioso) ma spero che fornisca un po 'di informazioni per voi.

+3

Ahhhh Ivy! Ho continuato a cercare la documentazione di Maven per qualcosa al riguardo. http://ant.apache.org/ivy/history/trunk/settings/version-matchers.html Suppongo che l'accompagnatore sub-revision sia ciò che sta accadendo? –

1

Penso che il problema sia che si sta pensando erroneamente al "+" in termini di regex. Non è inteso per essere letto come un elemento di espressione regex ("uno o più caratteri numerici"), ma piuttosto come "l'ultima versione disponibile in cui ciascuno dei principali componenti SEMVER corrisponde al modello fornito". Riferimenti sul motivo per cui non è preferibile utilizzare questa notazione possono essere trovati a: http://central.sonatype.org/articles/2014/Oct/28/enforcing-valid-dependency-versions/

Problemi correlati