2015-01-02 13 views
5

Se qualcuno potesse aiutarmi qui mi risparmierebbe molto tempo.maven - utilizzo di una fonte locale anziché di dipendenze esterne

Gestisco una libreria open source che viene inviata a un repository di sonatype. Apporto alcune modifiche a questa libreria alcune volte al giorno e la sposto nel build 1.0_snapshot utilizzando la distribuzione di mvn. Chiamiamolo progetto1

Lavoro costantemente in un altro progetto che usa quella libreria chiamiamolo progetto2.

In questo momento, ogni volta che posso apportare modifiche al Progetto 1 o 2, Ho bisogno di costruire prima e distribuire progetti da 1 a repo, quindi costruire progetto 2 in modo che scarica una nuova copia di project1.jar

Project2 ha Project1 come una dipendenza in un pom.xml:

<dependency> 
      <groupId>com.group</groupId> 
      <artifactId>project1</artifactId> 
      <version>1.0-SNAPSHOT</version> 

</dependency> 

al fine di costruire in un modo in cui tutti i miei cambiamenti può essere testato, devo fare qualcosa di simile:

mvn -f ./project1/pom.xml clean deploy 
mvn -U -f ./project2/pom.xml clean package 

carica il mio project1.jar in sonatype, quindi project2 scarica la nuova istantanea e la costruisce.

Questa è un'immagine semplificata di ciò che sto facendo su una scala più grande, in cui le mie composizioni impiegano 5 minuti e download.

Domanda: Qual è il modo corretto di utilizzare Maven in modo che sappia utilizzare l'origine di project1 in una dipendenza nel progetto 2?

risposta

5

IDE:

  • installare M2E in Eclipse
  • importare i progetti sia nello spazio di lavoro
  • dal progetto dei consumatori (click destro> Maven> abilitare la risoluzione di lavoro)

questo metterà Le classi di project2 in classpath dal suo target/classes invece del jar effettivo

nativo Maven dritto:

  • You can create a maven project tree, se questo due sono progetto open source sta attraversando stesso ciclo di build deve avere già uno, se non sono collegate, ma relativo per il vostro caso d'uso allora si può creare temporaneamente un albero di Maven in cima di questi 2 progetti e costruire il genitore superiore costruirà dal basso verso l'alto in un solo comando

troverà il progetto foglia, costruirla installarlo nella cache di Maven e ora, mentre la costruzione projectA si farà riferimento che dalla cache di Maven quindi non c'è bisogno di distribuire in sonotype

+1

grazie per l'aiuto, la soluzione ho bisogno dovrebbe essere indipendente dalla IDE - ho bisogno di costruire più velocemente sulla riga di comando. – bsautner

+0

@bsautner ha aggiornato la risposta –

+0

grazie - leggerò gli alberi esperti, che deve essere quello che mi manca – bsautner

3

Si può anche puntare Progetto2 di costruire utilizzando la modalità offline:

mvn -o package 

Poi si lascia cadere la parte di upload del costruire project1 per il repo remoto.

Controllare il seguente link: Intro to repositories e How do I configure Maven for offline development?

+0

quando applico una modifica a project1 e lo compilo con mvn -o pacchetto, e poi prova e usa quel cambiamento in project2 - la compilazione fallisce. Sembra comunque la soluzione giusta: voglio che le build utilizzino il mio repository locale. Controllerò i link che hai postato. Grazie – bsautner

Problemi correlati