2013-07-04 36 views
5

Tôi không hiểu tại sao điều này lại khó như vậy:tạo tác sao chép từ kho lưu trữ maven cục bộ

Trong tập lệnh, tôi cần phải sao chép một tạo tác từ nexus vào một thư mục nhất định. Sử dụng API REST REST tôi sẽ phải chỉ định kho lưu trữ mà tôi không muốn phải biết. Vì vậy, tôi đã cố gắng nhận được đồ tạo tác với mục tiêu nhận được phụ thuộc của maven-dependency-plugin, hoạt động tốt. (Trong trường hợp đó, tôi nhận được nó từ một nhóm trong mối quan hệ của chúng tôi bao gồm cả bản phát hành và ảnh chụp nhanh.)

Tuy nhiên, bây giờ tôi có tạo phẩm trong repo cục bộ của mình và mục tiêu "sao chép" của cùng một plugin không có vẻ là có thể nhận được đồ tạo tác đó từ đó. Có thực sự cần thiết để đi sâu vào thư mục .m2 và lấy jar với lệnh unix cp? Bất kỳ ai đã từng sao chép các hiện vật từ repos địa phương của họ sang các thư mục khác trước đây?

Ngoài ra, nếu ai đó có thể cho tôi biết cách nhận được đồ tạo tác thông qua API Nexus mà không chỉ định repo, điều đó cũng sẽ hoạt động.

+0

nào maven Plugin bạn đã thử sử dụng? Tôi mong đợi plugin phụ thuộc sẽ làm việc cho điều này: http://maven.apache.org/plugins/maven-dependency-plugin/ Khi bạn nói "Bây giờ tôi có phần tạo tác trong repo cục bộ của tôi", ý của bạn là, trong đó trường hợp, bạn * CHỈ * có tạo phẩm trong repo địa phương của bạn-- có nghĩa là, trên cùng một máy? – Keith

+0

Tôi đã sử dụng org.apache.maven.plugins: maven-dependency-plugin: 2.8: nhận được phần tạo tác từ nexus đến repo cục bộ của tôi trong ~/.m2 - vì vậy bây giờ nó nằm trên máy cục bộ của tôi (và trên nexus cục bộ của chúng tôi , quá). –

+0

Trong bước thứ hai, tôi cố gắng sử dụng org.apache.maven.plugins: maven-dependency-plugin: 2.8: sao chép để có được tạo tác đó từ ~/.m2/** đến một số thư mục khác trên máy của tôi nhưng mục tiêu sao chép đi thẳng đến trung tâm và không nhìn vào repo cục bộ của tôi (nó không nhìn vào nexus cục bộ của chúng ta bởi vì nó không được cấu hình trong tệp settings.xml của tôi, điều này có thể hơi lạ, nhưng chúng ta cấu hình nó trong công ty mẹ pom, nó là bước đầu tiên, tôi có thể cung cấp url của nexus địa phương, đó là lý do tại sao hoạt động) –

Trả lời

2

Dường như vấn đề là tệp _maven.repositories kết hợp với thiết lập maven cụ thể tại công ty của tôi.

Chúng tôi không đặt thông tin về repo cục bộ trong tệp settings.xml của chúng tôi. Đó là tất cả trong pom cha mẹ mà tất cả các dự án của chúng tôi sử dụng. Nhưng nếu bạn muốn làm một số ma thuật mvn-CLI thuần túy bạn không có cha mẹ-pom, do đó bạn phải cung cấp URL cho repo địa phương mình. Điều này là có thể với sự phụ thuộc: có được mục tiêu, đó là lý do tại sao tôi có thể tải xuống đồ tạo tác từ Nexus của chúng tôi vào repo địa phương của tôi.

Khi sử dụng sao chép, tuy nhiên, bạn không thể chỉ định URL. Nhưng tại sao tôi muốn? Tôi vừa tải xuống phần tạo tác đó vào repo địa phương của tôi, đúng không?

Đó là nơi các tệp _maven.repositories phát huy tác dụng. Ngay cả với chuyển đổi -o, maven3 cũng tham khảo tệp đó, chỉ định repo gốc mà tạo phẩm đến từ đó. (nhờ những người trong số this thread để đăng những phát hiện của họ!). Nếu nó không thể liên lạc với repo, nó sẽ cho rằng tệp của bạn không có ở đó. (Btw., Đây không phải là imho hữu ích. Nó nên nói một cái gì đó về repo ban đầu không thể truy cập được và tập tin do đó sẽ không được sao chép.)

Đây là lý do tại sao sao chép không hoạt động đối với tôi.

Chỉ cần đổi tên tệp đó thành thủ thuật.

Tôi sẽ phải điều tra giải pháp sạch hơn cho điều này.

Để làm cho mọi thứ trở nên phức tạp hơn, tôi không thể sử dụng sự phụ thuộc: sao chép hoặc phụ thuộc: copy-dependecies. Đối với một số lý do họ yêu cầu một pom, mà tôi không có trong usecase của tôi. Công việc gì là org.apache.maven.plugins: maven-dependency-plugin: 2.8: bản sao mà tôi tin là được cho là giống nhau, nhưng đó là một câu chuyện khác.

Cảm ơn câu trả lời của bạn!

+0

Cảm ơn bạn đã đăng bài này! Tôi đã có cùng một vấn đề; tiếp tục đi đến repo trung tâm. Đã phải xác định một cấu hình trong tệp settings.xml và liệt kê ra repo maven trung tâm và repo riêng của tôi. [Multi-repos] (https://maven.apache.org/guides/mini/guide-multiple-repositories.html). Tôi cũng thấy rằng sử dụng phiên bản 2.1 của plugin phụ thuộc được hỏi về POM nhưng phiên bản 2.8 thì không. Tôi tưởng tượng nó là một yêu cầu tính năng để có thể chạy nó mà không có POM và do đó 2.8 (mới nhất) có khả năng chạy mà không có POM. – Justin

3

Chỉ cần cố gắng này, và nó làm việc cho tôi:

mvn dependency:copy-dependencies -DincludeArtifactIds=jcharts -DincludeGroupIds=jcharts -DoutputDirectory=/tmp/ 

này sao chép jcharts vật: jcharts đến/tmp/Đó là vào repo địa phương (và từ xa) của tôi khi điều này được thực thi.

+0

nhưng nó cần một pom để chạy (mà tôi không có trong trường hợp này). điều này có thể là thứ gì đó được tạo ra, giống như một nguyên mẫu? –

+0

Bạn thậm chí không cần một pom. Bạn có thể sử dụng các thư viện Java nằm bên dưới để tải xuống từ các repo Maven. – noahlz

+0

Ý tôi là, khi tôi thực hiện mục tiêu này (với nhóm điều chỉnh và ID tạo tác), tôi nhận được thông báo "Mục tiêu yêu cầu một dự án để thực thi nhưng không có POM trong thư mục này". –

1

Nếu bạn đang sử dụng Nexus Sonatype, bạn nên xem xét tắt "Trung tâm" as outlined in their book.

Nếu không, mỗi @Keith, dependency:copy-dependency sẽ làm những gì bạn đang cố gắng làm. dependency:get đặc biệt tải từ kho từ xa, as stated in the documentation

Bạn cũng có thể buộc Maven để không tải về từ kho l phi địa phương bằng cách chạy nó trong chế độ offline: -o

Sửa

Bạn cũng có thể sử dụng Maven Wagon Plugin để sao chép tệp từ kho lưu trữ cục bộ của bạn vào một thư mục tùy ý. Điều này không nên yêu cầu một pom (nhưng bạn có thể cần phải cung cấp URL đầy đủ vào bình).

+0

có vẻ như vấn đề của tôi có thể là một vấn đề khác. Tôi đã lấy lời khuyên của bạn và cố gắng chuyển đổi -o, và bây giờ maven tuyên bố rằng tạo tác không có trong repo địa phương của tôi. Tôi sẽ phải điều tra điều đó. cám ơn! –

0

tôi cần để có thể xác định ID nhóm, ID tạo tác và phiên bản (và đóng gói), điều này đã làm việc cho tôi:

mvn dependency:copy \ 
    -Dartifact=org.openmrs.web:openmrs-webapp:2.2.0-SNAPSHOT:war \ 
    -DoutputDirectory=/tmp