Difference between revisions of "Aggiungere Repository Personalizzati per Soddisfare Dipendenze"
Line 4: | Line 4: | ||
Questo di solito accade perché si sta cercando di costruire un progetto che ha definito un insieme personalizzato di release e snapshot nel pom.xml. | Questo di solito accade perché si sta cercando di costruire un progetto che ha definito un insieme personalizzato di release e snapshot nel pom.xml. | ||
− | + | Come esempio, proviamo a compilare Apache Shindig dai sorgenti di cui abbiamo fatto il ChekOut da Apache Incubator. | |
− | + | Che cosa è Shindig Apache? Diciamo che Shindig mira a fornire un contenitore che permette di eseguire gadget OpenSocial. Shindig dipende da alcuni repository Maven personalizzati per i componenti che devono ancora essere aggiunti al repository centrale Maven. Usando Shindig come esempio si puo' vedere cosa succede quando Nexus non ha ancora gli artefatti e quali passi si possono adottare per aggiungere i repository a Nexus. | |
− | |||
− | Che cosa è Shindig Apache? Diciamo che Shindig mira a fornire un contenitore che | ||
− | Il seguente esempio presuppone che si | + | Il seguente esempio presuppone che si sia installato Subversion e che si possa eseguire Subversion da riga di comando. Facciamo il CheckOut di Apache Shindig da Apache Incubator con Subversion e compiliamo. |
Per fare questo, eseguire i seguenti comandi: | Per fare questo, eseguire i seguenti comandi: | ||
Line 45: | Line 43: | ||
− | La compilazione non riesce perché non è in grado di scaricare | + | La compilazione non riesce perché non è in grado di scaricare due artefatti. |
+ | |||
+ | Uno dei manufatti che Maven cerca di scaricare ha un identificatore Caja e artifactId di Caja, e una versione di r2178. | ||
+ | Si tratta di un artefatto che è ospitato su un repository | ||
+ | http://google-caja.googlecode.com/svn/maven | ||
+ | personalizzato. | ||
− | + | Per Maven quindi è impossibile scaricare questo artefatto perché il settings.xml è stato configurato per cercare i mirror per i gruppi pubblici e snapshot sul server locale Nexus. | |
− | |||
− | Per Maven quindi è impossibile scaricare questo artefatto perché il settings.xml è stato configurato per | ||
− | Quindi anche se il pom.xml per Apache Shindig definisce un repository e punta ad un URL corretto http://google-caja.googlecode.com/svn/maven, Nexus non è in grado di recuperare un artefatto da un repository che non conosce. | + | Quindi anche se il pom.xml per Apache Shindig definisce un repository e punta ad un URL corretto |
+ | http://google-caja.googlecode.com/svn/maven, | ||
+ | Nexus non è in grado di recuperare un artefatto da un repository che non conosce. | ||
Ricordiamo che abbiamo configurato Maven affinchè tutte le richieste di manufatti passino attraverso Nexus. | Ricordiamo che abbiamo configurato Maven affinchè tutte le richieste di manufatti passino attraverso Nexus. | ||
− | In effetti, ci sono due repository che Nexus non conosce in questa build: Caja e OAuth. Caja e OAuth sono due librerie che sono ancora in sviluppo. Entrambi i progetti sono "released", e le dipendenze su Shindig si basa non sono certamente SNAPSHOT release, ma questi progetti non sono stati pubblicati nel Maven Central Repository. Dobbiamo trovare un modo per far conoscere a Nexus questi repository, prima di poter | + | In effetti, ci sono due repository che Nexus non conosce in questa build: Caja e OAuth. Caja e OAuth sono due librerie che sono ancora in sviluppo. Entrambi i progetti sono "released", e le dipendenze su cui Shindig si basa non sono certamente SNAPSHOT release, ma questi progetti non sono stati pubblicati nel Maven Central Repository. Dobbiamo trovare un modo per far conoscere a Nexus questi repository, prima di poter compilare questo progetto. |
Ci sono due modi per risolvere questo problema. | Ci sono due modi per risolvere questo problema. | ||
− | *In primo luogo, è possibile modificare | + | *In primo luogo, è possibile modificare il settings.xml per sostituire gli identificatori di specifici repository. Invece di elencare il gruppo pubblico Nexus come mirrorOf di tutti i repository, è possibile modificare l'elemento mirrorOf nel settings.xml a "centrale". In questo modo Maven tenta di scaricare le dipendenze direttamente dal repository OAuth e Caja. Questo funziona perché Maven consulta Nexus solo per i repository che corrispondono ai repository specificati nell'elemento mirrorOf in settings.xml. Se Maven vede l'identificatore Caja o OAuth, e non vede un repository configurato in settings.xml, tenterà di connettersi ai repository direttamente. |
*In secondo luogo, l'opzione più interessante è quella di aggiungere questi due repository di Nexus e poi aggiungere questi repository al gruppo pubblico. | *In secondo luogo, l'opzione più interessante è quella di aggiungere questi due repository di Nexus e poi aggiungere questi repository al gruppo pubblico. | ||
− | + | [https://scm.cedrc.cnr.it/wiki/index.php/Aggiungere_Nuovi_Repository Aggiungere Nuovi Repository ] |
Revision as of 21:22, 17 May 2010
Se, a questo punto hai configurato il settings.xml Maven onde sfruttare Nexus come un mirror per tutti i repository, puo' accadere che alcuni progetti non siano in grado di recuperare gli artefatti dall' installazione locale Nexus.
Questo di solito accade perché si sta cercando di costruire un progetto che ha definito un insieme personalizzato di release e snapshot nel pom.xml.
Come esempio, proviamo a compilare Apache Shindig dai sorgenti di cui abbiamo fatto il ChekOut da Apache Incubator.
Che cosa è Shindig Apache? Diciamo che Shindig mira a fornire un contenitore che permette di eseguire gadget OpenSocial. Shindig dipende da alcuni repository Maven personalizzati per i componenti che devono ancora essere aggiunti al repository centrale Maven. Usando Shindig come esempio si puo' vedere cosa succede quando Nexus non ha ancora gli artefatti e quali passi si possono adottare per aggiungere i repository a Nexus.
Il seguente esempio presuppone che si sia installato Subversion e che si possa eseguire Subversion da riga di comando. Facciamo il CheckOut di Apache Shindig da Apache Incubator con Subversion e compiliamo.
Per fare questo, eseguire i seguenti comandi:
svn co http://svn.apache.org/repos/asf/incubator/shindig/trunk shindig ... Subversion will checkout the trunk of Apache Shindig ...
cd shindig
mvn install ... Maven will build Shindig ... Downloading: http://localhost:8081/nexus/content/groups/\ public/caja/caja/r2178/caja-r2178.jar ... [INFO] ------------------------------------------------------------------------ [ERROR] BUILD ERROR [INFO] ------------------------------------------------------------------------ [INFO] Failed to resolve artifact.
Missing: ---------- 1) caja:caja:jar:r2178 Try downloading the file manually from the project website. ...
---------- 3 required artifacts are missing.
for artifact: org.apache.shindig:shindig-gadgets:jar:1-SNAPSHOT
from the specified remote repositories: nexus (http://localhost:8081/nexus/content/groups/public)
La compilazione non riesce perché non è in grado di scaricare due artefatti.
Uno dei manufatti che Maven cerca di scaricare ha un identificatore Caja e artifactId di Caja, e una versione di r2178. Si tratta di un artefatto che è ospitato su un repository
http://google-caja.googlecode.com/svn/maven
personalizzato.
Per Maven quindi è impossibile scaricare questo artefatto perché il settings.xml è stato configurato per cercare i mirror per i gruppi pubblici e snapshot sul server locale Nexus.
Quindi anche se il pom.xml per Apache Shindig definisce un repository e punta ad un URL corretto
http://google-caja.googlecode.com/svn/maven,
Nexus non è in grado di recuperare un artefatto da un repository che non conosce. Ricordiamo che abbiamo configurato Maven affinchè tutte le richieste di manufatti passino attraverso Nexus.
In effetti, ci sono due repository che Nexus non conosce in questa build: Caja e OAuth. Caja e OAuth sono due librerie che sono ancora in sviluppo. Entrambi i progetti sono "released", e le dipendenze su cui Shindig si basa non sono certamente SNAPSHOT release, ma questi progetti non sono stati pubblicati nel Maven Central Repository. Dobbiamo trovare un modo per far conoscere a Nexus questi repository, prima di poter compilare questo progetto.
Ci sono due modi per risolvere questo problema.
- In primo luogo, è possibile modificare il settings.xml per sostituire gli identificatori di specifici repository. Invece di elencare il gruppo pubblico Nexus come mirrorOf di tutti i repository, è possibile modificare l'elemento mirrorOf nel settings.xml a "centrale". In questo modo Maven tenta di scaricare le dipendenze direttamente dal repository OAuth e Caja. Questo funziona perché Maven consulta Nexus solo per i repository che corrispondono ai repository specificati nell'elemento mirrorOf in settings.xml. Se Maven vede l'identificatore Caja o OAuth, e non vede un repository configurato in settings.xml, tenterà di connettersi ai repository direttamente.
- In secondo luogo, l'opzione più interessante è quella di aggiungere questi due repository di Nexus e poi aggiungere questi repository al gruppo pubblico.