2011-10-10 14 views
14

Quindi ho un progetto che dipende da una versione di istantanea di un altro progetto. La dipendenza è:C'è un modo per far sì che Maven scarichi automaticamente le versioni di istantanee?

<dependency> 
    <groupId>org.oop</groupId> 
    <artifactId>oop</artifactId> 
    <version>0.9.9-SNAPSHOT</version> 
</dependency> 

Per il progetto oop, ho fatto fare un 'mvn deploy pulito', così la versione snapshot dovrebbe essere da qualche parte nel repository centrale Maven. Ma quando faccio un mvn install clean, la dipendenza snapshot sopra non può essere risolto e ottengo questo:

mancante:

1) org.oop: oop: Vaso: 0.9.9-SNAPSHOT

Prova a scaricare il file manualmente dal sito web del progetto.

Quindi, installare con il comando: mvn install: installare file -DgroupId = org.oop -DartifactId = oop -Dversion = 0.9.9-SNAPSHOT -Dpackaging = vaso -Dfile =/path/to/file

In alternativa, se si ospita il proprio repository è possibile distribuire il file c'è: mvn deploy: distribuire file -DgroupId = org.oop -DartifactId = oop -Dversion = 0.9.9-SNAPSHOT -Dpackaging = vaso -Dfile =/percorso/to/file -Durl = [url] -DrepositoryId = [id]

C'è un modo per far sì che Maven scarichi automaticamente l'istantanea? Mi manca qualcosa qui.

Edit1: Sul mio settings.xml ho:

<server> 
     <id>sonatype-nexus-snapshots</id> 
     <username>XXXXXX</username> 
     <password>XXXXXX</password> 
    </server> 

    <server> 
     <id>sonatype-nexus-staging</id> 
     <username>XXXXXX</username> 
     <password>XXXXXX</password> 
    </server> 

EDIT2: enter image description here

risposta

13

Basta aggiungere questo alle tue ~/.m2/impostazioni.xml:

<profiles> 
    <profile> 
    <id>allow-snapshots</id> 
     <activation><activeByDefault>true</activeByDefault></activation> 
    <repositories> 
     <repository> 
     <id>snapshots-repo</id> 
     <url>https://oss.sonatype.org/content/repositories/snapshots</url> 
     <releases><enabled>false</enabled></releases> 
     <snapshots><enabled>true</enabled></snapshots> 
     </repository> 
    </repositories> 
    </profile> 
</profiles> 
+2

può essere aggiunto in qualche modo al POM in cui la dipendenza viene dichiarata anziché in settings.xml? – Sergio

14

Per aggiornare le istantanee, provare con l'opzione -u

-U,--update-snapshots     Forces a check for updated 
             releases and snapshots on remote 
             repositories 

Tuttavia, hai detto:

Ho eseguito una distribuzione "mvn clean", quindi la versione dello snapshot dovrebbe trovarsi da qualche parte nel repository centrale di Maven.

Questo non è proprio possibile, la tua istantanea sta andando da qualche altra parte. Se faccio un mvn clean deploy senza configurare il mio repository personale ottengo:

distribuzione non riuscita: elemento repository non è stato specificato nella POM all'interno dell'elemento distributionManagement o in -DaltDeploymentRepository parametro = id :: :: disposizione url

per consentire la distribuzione, v'è una certa configurazione da aggiungere a pom.xml, come ad esempio:

<distributionManagement> 

    <!-- Publish versioned releases here --> 
    <repository> 
     <id>myrepo</id> 
     <name>My releases</name> 
     <url>http://nexus.mycompany.com/nexus/content/repositories/releases</url> 
    </repository> 

    <!-- Publish snapshots here --> 
    <snapshotRepository> 
     <id>myrepo</id> 
     <name>my snapshots</name> 
     <url>http://nexus.mycompany.com/nexus/content/repositories/snapshots</url> 
    </snapshotRepository> 

</distributionManagement> 

<repositories> 
    <repository> 
     <id>myrepo</id> 
     <name>My Public Repository</name> 
     <url>http://nexus.mycompany.com/nexus/content/groups/public</url> 
     <releases> 
      <enabled>true</enabled> 
     </releases> 
     <snapshots> 
      <enabled>true</enabled> 
     </snapshots> 
    </repository> 
</repositories> 
+0

Grazie per l'aiuto, vedere cosa ho nel mio settings.xml sulla mia ultima modifica alla mia domanda. Inoltre, la libreria a cui sto cercando di fare riferimento è. GroupID: me.soliveirajr Artefatto: menta-container. Versione: 0.9.9-SNAPSHOT. Riesci a trovarlo ovunque nel repository Maven? Posso vederlo qui ... – chrisapotek

+0

Vedere EDIT2 per dove posso vedere l'istantanea. – chrisapotek

+0

ok e quando si esegue la distribuzione di mvn è pubblicato bene? nessun errore da vedere? nel caso provi con mvn -e deploy e anche mvn -X distribuisci se necessario – stivlo

0

È possibile

012.
  • utilizzare un progetto principale che costruisce tutte le istantanee, o
  • distribuire le istantanee al vostro server di build di Maven (Nexus/Archiva/..) utilizzando per esempio, mvn: deploy
1

Questa dipendenza esiste nel repository? (in pom.xml o settings.xml)?

Sembra no. A proposito, dai un'occhiata alla tua configurazione, solo che non stai usando -o (offline). Inoltre è possibile utilizzare -U per aggiornare le istantanee.

19

Maven proverà a scaricare l'istantanea automaticamente e in effetti lo fa (come indica l'errore). Per impostazione predefinita, Maven cercherà versioni offline più recenti una volta al giorno, ma è possibile modificare questo intervallo nel vostro snapshot repository di configurazione (ad esempio in settings.xml):

<updatePolicy>interval:5</updatePolicy> 

Questo renderà controllo Maven ogni 5 minuti (se lo costruisci spesso). In alternativa, è possibile utilizzare l'opzione -U o --update-snapshots per forzare il controllo manualmente.

Tuttavia, non è possibile trovare la dipendenza. Potresti postare le impostazioni del repository e la configurazione degli artefatti per la dipendenza dello snapshot?

L'arte org.oop:oop:jar:0.9.9-SNAPSHOT è nel repository?

... quindi la versione di istantanea dovrebbe essere da qualche parte nel repository centrale di Maven.

No, non lo è. Ho provato a cercarlo, ma non sono riuscito a trovarlo. Afaik, c'è un meccanismo di messa in scena, quindi forse le tue impostazioni sono semplicemente sbagliate. Ma normalmente, come già detto, dovresti usare il tuo gestore di repository come Artifactory o Nexus.

+0

Ecco la libreria che sto cercando di scaricare: GroupID: me.soliveirajr Artefatto: menta -container Versione: 0.9.9-SNAPSHOT. Posso trovarlo nel repository. – chrisapotek

+0

Vedere l'EDIT2 per dove posso vedere l'istantanea. – chrisapotek

+0

@chrisapotek che non è 'org.oop: oop: jar: 0.9.9-SNAPSHOT' ma' me.soliveirajr: mint-container: jar: 0.9.9-SNAPSHOT' quindi - la tua dipendenza è sbagliata in quel caso. – Thomas

0

Risolviamo un po 'la terminologia per assicurarci che non ci siano equivoci.

"Maven Central" (http://search.maven.org/) è un sito globale in cui si trovano solo rilasci. Central non accetta le istantanee, quindi la distribuzione dovrebbe darti un errore.

Probabilmente si intende il proprio proxy/cache maven locale/aziendale. Questi possono anche essere configurati per rifiutare le versioni di istantanee. In caso di Nexus, puoi anche definire regole più complesse. Nel mio caso, ho riscontrato un problema che non ha dato alcun errore durante mvn deploy ma ho potuto vedere un errore nei log del server.

Provare a seguire i dati: Abilita debug (mvn -X) per vedere dove Maven carica i dati. Quindi controlla il server per vedere se gli artefatti sono stati effettivamente caricati. Controlla gli errori del registro del server.

Si noti inoltre che le dipendenze dello snapshot vengono aggiornate solo una volta al giorno; quindi questo non funzionerà:

PC# 1: mvn install -> mancante errore dipendenza PC# 2: mvn deploy PC# 1: mvn install -> Dipendenza è ancora mancante a causa di "aggiornamento una volta al giorno" politica

Prova mvn install -U per forzare Maven ad aggiornare i suoi metadati memorizzati nella cache.

+0

Controlla il repository locale ('$ HOME/.m2/repository /'): la gerarchia delle cartelle esiste lì? Esiste un file '* metadata * .xml' da qualche parte? Cosa contiene? Vedi la richiesta di download sul tuo server Nexus? –

+0

Non sto usando il mio server nexus. Sto usando il repository di istantanee sonatype. Controlla il mio EDIT2. – chrisapotek

+0

Trova un modo per ottenere i registri dall'istanza di Naxus in esecuzione su Sonatype. Leggi anche tutte le mie domande; non sempre dipendono l'uno dall'altro. Uno di questi potrebbe portarti sulla strada giusta. –

0

Ho riscontrato il problema delle istantanee non aggiornate anche quando si imposta -U sulla riga di comando. Per me il problema era che il mio client era Maven 3 e il server era Maven 2, e in Maven 3 non sono più supportate le istantanee uniche. Abbiamo dovuto creare un nuovo repository con snapshot timestamp per supportare i client 3.xx.

Problemi correlati