2013-07-12 13 views
6

Jestem nowy w Maven. Chciałbym skorzystać z następujących ustawień:Lokalne repozytorium Maven w settings.xml kontra pom.xml

1) zdalnego repozytorium ściągnąć artefakt publiczny

2) współdzielony z lokalnym repozytorium pobranych artefaktów, które działa dobrze przez dodanie następujących do settings.xml:

<localRepository>C:/m2repo</localRepository> 

3) teraz chciałbym również mieć repozytorium artefaktów odwołuje od pojedynczego projektu, jak folderze staromodny „lib”.

Więc dodałem następujące do projektu pom.xml:

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

I wdrożyli kilka słoików do folderu „repo”, ale gdy dodać je jako zależności w pom.xml, nie zostały rozwiązane. Maven patrzy tylko na współdzielone repozytorium i zdalne repozytorium. Kiedy kopiuję zawartość "repo" do udostępnionego "m2repo", to działa. Czy czegoś brakuje lub czy to ustawienie nie jest w ogóle możliwe?

Odpowiedz

5

Przyczyną mojego problemu było dublowanie repozytoriów w moim settings.xml, mam lustrzane odbicie ustawić do wszystkich repozytoriów:

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

który zmieniłem tylko repozytoriach zewnętrznych:

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

Teraz moje artefakty znajdują się w repozytorium "projektu".Jednak Maven zachowuje się inaczej, niż się spodziewałem, jak pisze Ceilfor, repozytorium systemu plików jest traktowane tak samo jak zdalne repozytorium - artefakty są kopiowane stamtąd do lokalnego repozytorium, co prowadzi do powielania słoików pomiędzy lokalnym repozytorium i repozytoriami innych systemów plików. Więc widzę, że ustawienie nie jest idealne. Jednak w moim przypadku nadal uważam to za najtrudniejszy sposób na zmanipulowanie projektu.

6

Choć możliwe, osobiście robię nie pomyśleć, że jest to dobra praktyka, aby to zrobić. W zależności od zastosowania ten post będzie pomocny: http://blog.sonatype.com/people/2009/02/why-putting-repositories-in-your-poms-is-a-bad-idea. Potrzebujesz również odtwarzalnego i przenośnego projektu, który omawia ten temat. Proszę nie sprawdzać tych słoików w VCS tylko ze względu na przenośność!

Spróbuję ci pomóc, jeśli nadal będziesz nalegać. Aby model działał, twój "folder repo" musi być zgodny ze strukturą zdefiniowaną jako here.

Mimo że twój "folder repo" jest lokalną strukturą plików, Maven nadal będzie traktował go tak, jakby był zdalnym repozytorium, podobnie jak maven central. Oznacza to, kiedy budujesz swój projekt, Maven spróbuje ściągnąć słoiki z Twojego folderu "repo" do .m2 repozytorium też:

Pobieranie: file:/j/my-project/my-miejscowy -repo/com/google/guava/guava/14.0.1/guava-14.0.1.pom
Pobrano: plik: /j/my-project/my-local-repo/com/google/guava/guava/14.0 0,1/guawy-14.0.1.pom (6 MB w 276,3 kb/s)
pobraniu: http://repo.maven.apache.org/maven2/com/google/google/1/google-1.pom
Pobrano: http://repo.maven.apache.org/maven2/com/google/google/1/google-1.pom (2 MB 10,4 Kb/s)

Widać, że słoik guawy będzie downloaded z "folderu repo" do mojego repozytorium .m2, ponieważ jest dostępny z mojego "folderu repo".

Powiązane problemy