2013-07-12 49 views
6

Tôi mới làm quen với Maven. Tôi muốn sử dụng các thiết lập sau:Kho lưu trữ cục bộ Maven trong settings.xml vs pom.xml

1) một kho lưu trữ từ xa để tải về tạo tác công

2) một kho lưu trữ địa phương chia sẻ cho vật tải mà công trình độc đáo bằng cách thêm dòng sau vào settings.xml:

<localRepository>C:/m2repo</localRepository> 

3) Bây giờ tôi cũng muốn có một kho lưu trữ cho các tạo tác được tham chiếu từ một dự án duy nhất, như thư mục "lib" cũ kỹ.

Vì vậy, tôi đã thêm dòng sau vào của dự án pom.xml:

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

tôi đã triển khai một số lọ vào thư mục "repo", nhưng khi tôi thêm chúng như phụ thuộc trong pom.xml, chúng không được giải quyết. Maven chỉ nhìn vào kho lưu trữ được chia sẻ và kho lưu trữ từ xa. Khi tôi sao chép nội dung của "repo" để chia sẻ "m2repo", nó hoạt động. Tôi có thiếu một cái gì đó hoặc là thiết lập này không thể ở tất cả?

Trả lời

5

Nguyên nhân của vấn đề của tôi là mirroring của kho trong settings.xml của tôi, tôi đã ánh xạ thiết lập để tất cả các kho:

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

mà tôi đã thay đổi để chỉ kho bên ngoài:

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

Bây giờ hiện vật của tôi được tìm thấy trong kho "dự án".Tuy nhiên, Maven hoạt động khác với những gì tôi mong đợi, như ceilfors viết, kho lưu trữ hệ thống tập tin được xử lý giống như kho từ xa - các tạo tác được sao chép từ đó đến kho lưu trữ cục bộ, dẫn đến sao chép các jars giữa kho lưu trữ cục bộ và kho lưu trữ hệ thống tệp khác. Vì vậy, tôi thấy các thiết lập không phải là lý tưởng. Tuy nhiên, trong trường hợp của tôi, tôi vẫn tìm ra cách nhanh nhất để làm dịu dự án.

6

Mặc dù có thể, cá nhân tôi làm không nghĩ rằng đó là một thực hành tốt để làm điều đó. Tùy thuộc vào cách sử dụng của bạn, bài đăng này sẽ hữu ích: http://blog.sonatype.com/people/2009/02/why-putting-repositories-in-your-poms-is-a-bad-idea. Bạn cũng muốn có một dự án tái tạo và di động, this question thảo luận về chủ đề liên quan này. Xin vui lòng không kiểm tra trong những lọ vào VCS của bạn chỉ vì lợi ích di động!

Tôi sẽ cố gắng giúp đỡ nếu bạn vẫn khăng khăng. Để làm cho mô hình của bạn hoạt động, "thư mục repo" của bạn phải tuân theo cấu trúc được xác định here.

Mặc dù "thư mục repo" của bạn là cấu trúc tệp cục bộ, Maven sẽ vẫn xử lý nó như thể nó là một kho lưu trữ từ xa, giống như trung tâm maven. Điều này có nghĩa, bất cứ khi nào bạn đang xây dựng dự án của bạn, Maven sẽ cố gắng tải xuống các lọ từ "thư mục repo" của bạn tới kho lưu trữ .m2 của bạn:

Tải xuống: tệp:/j/my-project/my-local -repo/com/google/guava/guava/14.0.1/guava-14.0.1.pom
Đã tải xuống: tệp: /j/my-project/my-local-repo/com/google/guava/guava/14.0 .1/ổi-14.0.1.pom (6 KB tại 276,3 KB/giây)
Downloading: http://repo.maven.apache.org/maven2/com/google/google/1/google-1.pom
Downloaded: http://repo.maven.apache.org/maven2/com/google/google/1/google-1.pom (2 KB tại 10,4 KB/giây)

Bạn có thể thấy rằng bình ổi sẽ là downloaded từ "thư mục repo" đến kho .m2 của tôi vì nó có sẵn từ "thư mục repo" của tôi.