2013-07-12 24 views
6

Sono nuovo di Maven. Vorrei utilizzare la seguente configurazione:Repository locale Maven in settings.xml vs pom.xml

1) un repository remoto per scaricare manufatto pubblico

2) un archivio locale condiviso per manufatti scaricato che funziona bene aggiungendo quanto segue al settings.xml:

<localRepository>C:/m2repo</localRepository> 

3) Ora vorrei anche avere un repository per i manufatti di riferimento da un unico progetto, come una cartella di vecchio stile "lib".

Così ho aggiunto quanto segue per pom.xml del progetto:

<repository> 
    <id>repo</id> 
    <name>repo</name> 
    <releases> 
    <enabled>true</enabled> 
    <checksumPolicy>ignore</checksumPolicy> 
    </releases> 
    <url>${project.baseUri}repo</url> 
</repository> 

Ho schierato alcuni vasi nella cartella "pronti contro termine", ma quando li aggiungo come dipendenze in pom.xml, non sono risolti. Maven guarda solo al repository condiviso e al repository remoto. Quando copio il contenuto di "repo" nel "m2repo" condiviso, funziona. Mi manca qualcosa o questa configurazione non è possibile?

risposta

5

La causa del mio problema era il mirroring dei repository nella mia settings.xml, ho mirroring impostata su tutti i repository:

<mirror> 
    <mirrorOf>*</mirrorOf> 
</mirror> 

che ho cambiato solo repository esterni:

<mirror> 
    <mirrorOf>external:*</mirrorOf> 
</mirror> 

Ora i miei artefatti si trovano nel repository "project".Tuttavia, Maven si comporta in modo diverso da come mi aspettavo, come scrive Ceilfors, il repository del filesystem è trattato come repository remoti - gli artefatti vengono copiati da lì al repository locale, il che porta alla duplicazione di contenitori tra il repository locale e altri repository di filesystem. Quindi vedo che l'impostazione non è l'ideale. Tuttavia, nel mio caso, trovo ancora il modo più veloce per mavenize il progetto.

6

Anche se possibile, personalmente faccio non penso che sia una buona pratica farlo. A seconda dell'utilizzo, questo post sarà utile: http://blog.sonatype.com/people/2009/02/why-putting-repositories-in-your-poms-is-a-bad-idea. Vuoi anche un progetto riproducibile e portatile, this question discute questo argomento correlato. Si prega di non controllare quei vasi nel VCS solo per motivi di portabilità!

Cercherò di aiutarti se insisti ancora. Per far funzionare il tuo modello, la tua "cartella repo" deve seguire la struttura definita here.

Anche se la "cartella repo" è una struttura di file locale, Maven la tratterà comunque come se fosse un repository remoto, proprio come Maven Central. Questo significa che, ogni volta che si stanno costruendo il vostro progetto, Maven cercherà di scaricare i barattoli dalla vostra cartella "repo" al tuo repository .m2 troppo:

Download: file:/j/my-progetto/my-locale -repo/com/google/guava/guava/14.0.1/guava-14.0.1.pom
Scaricato: file: /j/my-project/my-local-repo/com/google/guava/guava/14.0 .1/guava-14.0.1.pom (6 KB a 276,3 KB/sec)
Download: http://repo.maven.apache.org/maven2/com/google/google/1/google-1.pom
Scaricato: http://repo.maven.apache.org/maven2/com/google/google/1/google-1.pom (2 KB al 10,4 KB/sec)

Si può vedere che il vaso guava sarà downloaded dalla "cartella repo" al mio repository .m2 poiché è disponibile dalla mia "cartella repo".

Problemi correlati