2013-03-14 27 views
5

Il mio obiettivo è di rilasciare un progetto che ha una singola dipendenza. Ho un repository nexus in cui distribuisco entrambe le versioni di snapshot e di rilascio.versioni maven rilasciano candidati e snapshot

L'una dipendenza che ho ha

group:artifact:1.1.0-SNAPSHOT 

e la seguente Release Candidate viene rilasciato nel mio Nexus repo

group:artifact:1.1.0-RC1 

quando si chiede alle versioni plugin per risolvere le dipendenze, si sostiene che nessun nuova dipendenza è disponibile. Così considerare che

1.1.0-SNAPSHOT > 1.1.0-RC1 

Tuttavia, se nel mio progetto, ho la versione 1.0.0-SNAPSHOT, versione 1.1.0-RC1 è risolto come la versione più recente.

Cosa mi manca? (I esaminato le fonti di plugin e abbiamo la seguente frammento:.?

String otherQualifier = otherVersion.getQualifier(); 

if (otherQualifier != null) 
{ 
    if ((qualifier.length() > otherQualifier.length()) 
     && qualifier.startsWith(otherQualifier)) 
    { 
    // here, the longer one that otherwise match is considered older 
    result = -1; 
    } 
    else if ((qualifier.length() < otherQualifier.length()) 
     && otherQualifier.startsWith(qualifier)) 
    { 
    // here, the longer one that otherwise match is considered older 
    result = 1; 
    } 
    else 
    { 
    result = qualifier.compareTo(otherQualifier); 
    } 
} 

che sembra buggy mi Qualsiasi idea

risposta

9

Maven numeri di versione sono composti come segue:

<major version>.<minor version>.<incremental version>-<qualifier> 

Se tutti i numeri di versione sono uguali, il qualificatore viene confrontato in ordine alfabetico. "RC1" e "SNAPSHOT" e ordinati in modo diverso a "a" e "b". Di conseguenza, "SNAPSHOT" è considerato più recente perché è maggiore in ordine alfabetico. this page come riferimento

Si noti che a.b.c-RC1-SNAPSHOT sarebbe considerato più vecchio di a.b.c-RC1.

Non sono sicuro di cosa suggerire come soluzione: è proprio come funziona il controllo delle versioni di Maven.

+0

link fornito aiutato molto , grazie – mirlitone

+0

Questo è solo a metà corretto, dato che SNAPSHOT è un qualificatore speciale che viene gestito da Maven al di fuori del processo che stai descrivendo. Vedi: https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN401 –

1

Le specifiche funzionano solo con major.minor.increment-qualificatore con qualifiche rispetto all'ordine lexigografico, indipendentemente dall'essere uno snapshot o altro.

Ho finito per bifare maven-versions-plugin e implementando il mio schema di versioni che ritengono che una versione snapshot di un release candidate sia sempre più vecchia di quella stessa candidata al rilascio.

questo non era troppo difficile da attuare, che si estendeva dalla

org/codehaus/mojo/versions/ordering/MavenVersionComparator 

e dichiarata dal propria classe in

org/codehaus/mojo/versions/ordering/VersionComparators.java 

e implementato la mia logica di business