2009-08-13 9 views
5

Điều tôi muốn làm là buộc Maven tải xuống 'maven-metadata.xml' cho mỗi tạo phẩm mà tôi có trong kho lưu trữ cục bộ của mình.Làm cách nào để buộc Maven tải xuống maven-metadata.xml từ kho lưu trữ trung tâm?

Hành vi mặc định của Maven là chỉ tải xuống siêu dữ liệu từ kho lưu trữ từ xa (xem this question).

Tại sao tôi muốn làm điều đó:

Hiện nay tôi có một kho lưu trữ từ xa đang chạy trong một máy xây dựng. Bởi kho lưu trữ từ xa, tôi có nghĩa là một thư mục nằm trong máy xây dựng có chứa tất cả các phụ thuộc mà tôi cần để xây dựng các dự án Maven của tôi. Lưu ý rằng tôi không sử dụng trình quản lý kho lưu trữ như Nexus, kho lưu trữ chỉ là bản sao của một kho lưu trữ cục bộ mà tôi đã tải lên máy xây dựng của mình.

Tuy nhiên, vì kho lưu trữ cục bộ của tôi không chứa tệp 'maven-metadata.xml', các tệp siêu dữ liệu này cũng bị thiếu trong kho lưu trữ của máy xây dựng. Nếu tôi có thể truy xuất các tệp siêu dữ liệu từ kho lưu trữ trung tâm, thì có thể tải lên một kho lưu trữ từ xa đang hoạt động đến máy xây dựng của tôi.

+0

Tôi không rõ ràng chính xác những gì bạn có nghĩa là, hoặc lý do tại sao bạn cần phải làm điều này. Bạn có thể giải thích những gì bạn đang cố gắng đạt được không? –

Trả lời

8

Bạn không muốn nhận siêu dữ liệu từ kho lưu trữ công khai, nó sẽ chứa tất cả các phiên bản có sẵn của một tạo phẩm nhất định, trong khi kho lưu trữ của bạn sẽ có một số tập hợp con của các bản phát hành.

Điều đáng nói là bạn thực sự sẽ tốt hơn với người quản lý kho lưu trữ. Các bước sau cho phép bạn tạo siêu dữ liệu tạo tác của bạn một lần. Nhưng nếu nhu cầu của bạn thay đổi, bạn sẽ phải lặp lại quy trình hoặc cập nhật tệp theo cách thủ công, vậy tại sao không chỉ sử dụng trình quản lý? Nexus có thể chạy độc lập và có một dấu chân rất nhỏ.


Ngay cả khi bạn không định sử dụng Nexus cho người quản lý kho lưu trữ, bạn vẫn có thể sử dụng Nexus để tạo siêu dữ liệu.

  1. Đầu tiên install Nexus.
  2. Xác định vị trí thư mục làm việc mối quan hệ (theo mặc định $ {user.home}/sonatype làm việc.
  3. Sao chép nội dung kho địa phương để các mối quan hệ làm việc/phát hành thư mục con.
  4. Start Nexus và kết nối với Nexus trang chủ trong trình duyệt (theo mặc định http://localhost:8081/nexus)
  5. Đăng nhập bằng cách sử dụng tài khoản quản trị (mật khẩu admin123)
  6. Bấm vào kho liên kết ở phía bên tay trái.
  7. Chọn kho phát hành, nhấp chuột phải và nhấp Rebuild Metadata

Trong một vài khoảnh khắc bạn nên có các siêu dữ liệu được tạo ra cho tất cả các đồ tạo tác. Sau đó, bạn có thể sao chép chúng vào bất cứ nơi nào bạn cần và gỡ cài đặt Nexus.

+1

Tôi đồng ý, anh ấy cần repos được chia sẻ cho máy xây dựng và máy cục bộ. Không có cách nào anh ta sẽ giữ hai bản sao của siêu dữ liệu đồng bộ – sal

+1

Giải pháp này đã làm việc cho tôi. Ngoài ra, nhờ lời khuyên của sal, nhưng những gì tôi thực sự cần là giải pháp cho vấn đề, mặc dù tôi hiểu rằng đó không phải là giải pháp lý tưởng ... –

4

Các kho lưu trữ mặc định được xác định trong super pom.xml rằng tất cả các poms kế thừa từ theo mặc định.

Nếu theo địa phương bạn muốn, bạn chỉ muốn sử dụng ~/.m2/repos/* sau đó làm việc ở chế độ ngoại tuyến. Thêm <offline>true</offline> để bạn settings.xml

Nếu do địa phương bạn có nghĩa là bạn địa phương máy chủ, bạn có thể cài đặt một trình quản lý kho như Nexus, sửa đổi tập tin cài đặt của bạn để sử dụng mối quan hệ theo "gương" như thế này:

<mirror> 
    <id>central-proxy</id> 
    <mirrorOf>central</mirrorOf> 
    <url>my/local/nexus/server</url> 
</mirror> 

Và vô hiệu hóa kho lưu trữ từ xa mà bạn không muốn trong Nexus.

+0

Theo địa phương, tôi có nghĩa là ~/.m2/repos/*, tuy nhiên nếu sử dụng thẻ hoặc cờ -o Maven sẽ không tải xuống các tệp 'maven-metada.xml' mà tôi muốn. –

+0

Tôi nghĩ rằng bạn cần phải có xây dựng và triển khai repos khác nhau cho bạn máy từ xa. Có máy xây dựng sử dụng một repo maven địa phương để xây dựng sau đó một nơi khác trên đĩa để triển khai. Sử dụng một số máy chủ để làm cho kho lưu trữ thứ 2 đó hiển thị. Bạn cũng sẽ muốn các bản dựng cục bộ của bạn được triển khai cho repos thứ 3 đó. Siêu dữ liệu sẽ tự phân loại trong tình huống đó. – sal

+0

những gì & tại sao ' '? mô tả ở trên đang giúp tôi. – hari

1

Một điều tôi tìm thấy là ai đó đang thực hiện tìm kiếm ban đầu của jarvana và đã đặt điều này trong pom, gây ra một thông báo lỗi siêu dữ liệu xảy ra. Điều này ...

<!-- <repository> 
     <id>jarvana</id> 
     <url>http://www.jarvana.com/jarvana/browse/</url> 
    </repository> --> 

..đã khắc phục lỗi và lỗi đã biến mất.

0

Trình quản lý lưu trữ rất tuyệt vời nhưng tôi không muốn cài đặt và chạy trên máy tính xách tay của mình. Tôi chỉ muốn tiết kiệm tài nguyên. Vì vậy, giải pháp của tôi là dưới đây:

  1. cài đặt kho như artifactory (https://www.jfrog.com/artifactory)
  2. chạy hiện thực qua máy chủ này (localhost: 8081)
  3. chạy hiện thực qua máy chủ từ xa (center.maven.org)
  4. tải xuống nội dung bộ nhớ cache của tạo tác
  5. sáp nhập vào thư mục: tải xuống thư mục từ bước 4 và thư mục tại ~/.m2/repository.

Bây giờ tôi có một ẩn kho với nội dung đầy đủ (nhị phân, nguồn, xml, md5, sha1)