2012-06-05 23 views
5

Tôi đang viết một ứng dụng yêu cầu tôi tải xuống một lọ được cung cấp cho nhóm mavens groupid/artifactid/phiên bản.Tôi làm cách nào để tải xuống một bình bằng cách sử dụng maven theo chương trình

Tôi hiện bắt đầu với

public Model pomToModel(String pomUrl) throws Exception { 
URL url = new URL(pomUrl); 
    InputStream stream = url.openStream(); 
    try { 
     Model model = new MavenXpp3Reader().read(stream); 
     return model; 
    } finally { 
     stream.close(); 
    } 
} 

Vì vậy, cho url của POM, bây giờ tôi có đối tượng maven mẫu đại diện cho nó. Điều này dường như hoạt động tốt.

Những gì tôi muốn biết là hai điều:

  1. tìm url của vật jar rằng mô hình đại diện trong kho maven rằng các plugin maven sẽ sử dụng
  2. cho các mô hình, tìm tệp đại diện cho bình trong kho lưu trữ cục bộ

Tôi đã có giải pháp chất lượng kém: tôi truy cập mvnrepository.com mã hóa url theo cách thủ công và tôi sử dụng ~/.m2/repository làm tiền tố cho tệp. Tôi rõ ràng có thể cải thiện giải pháp này, nhưng tôi sẽ kết thúc kém sao chép mã được kiểm tra tốt và cũng được sử dụng trong cơ sở mã maven.

Tôi thực sự muốn biết cách thực hiện điều này bằng cách sử dụng các lớp maven.

Tôi đã thực hiện một chút công bằng tìm kiếm google, nhưng điều thú vị về tìm kiếm bất cứ điều gì về maven và lọ (ngay cả trên stackoverflow) là tôi tìm thấy rất nhiều giải pháp về cách sử dụng maven, chứ không phải là cách sử dụng mã các lớp học quạ.

Thanks for the help

+0

Maven tải tất cả jar tệp được chỉ định trong tệp pom.xml của mình. –

+0

cũng xem xét [jcabi-aether] (http://www.jcabi.com/jcabi-aether/), điều này có thể giúp làm điều này dễ dàng hơn và ít dòng mã hơn – yegor256

Trả lời

2

Để tải hiện vật từ một kho Maven nó được thiết kế để sử dụng Aether lib.

Xem thêm http://www.sonatype.com/people/category/aether/

Bên cạnh đó có những examples thế nào để làm điều này và toàn bộ mã nguồn của Aether lib. Thời gian dài hơn một năm trước, tôi là had played a little bit xung quanh với Aether.

+0

Tôi đã dành một vài giờ không vui chơi với Aether. Có một bài hướng dẫn hay một blog ở bất cứ đâu? Các bản demo không biên dịch, các lớp họ đặt tên dường như không tồn tại. Tôi sẽ tiếp tục trong một vài giờ nữa trước khi đập đầu vào bàn :) –

+0

Có một cái nhìn bên trong: https://github.com/sonatype/sonatype-aether/tree/master/aether-demo – khmarbaise

+0

Đây là một một số giải thích về cách sử dụng mã, với một liên kết đến một plugin ví dụ thực hiện điều này: http://www.sonatype.com/people/2011/01/how-to-use-aether-in-maven-plugins/ – Noremac

5

Tùy chọn 1

Aether theo khuyến cáo của khmarbaise.

Đó là thư viện bản địa mà tàu với Maven 3.0

Lựa chọn 2

Nếu bạn muốn có một giải pháp đơn giản để tải về module Maven từ dòng lệnh hoặc trong một kịch bản shell, Apache ivy có jar standalone.

Ví dụ:

using IVY dependencies manager programmatically

Lựa chọn 3

Nếu bạn chỉ tìm kiếm một lọ Maven và không quan tâm về quản lý phụ thuộc nó thậm chí còn đơn giản hơn.

Dưới đây là làm thế nào để lấy lại jar log4j trực tiếp từ Maven Trung ương:

curl -O http://search.maven.org/remotecontent?filepath=log4j/log4j/1.2.17/log4j-1.2.17.jar 

Nếu bạn đang sử dụng một trình quản lý kho Nexus nó có một API REST hữu ích

Using the Nexus rest API to get latest artifact version for given groupid/artifactId

+0

Tôi phải nói rằng cách tiếp cận ivy hoạt động rất tốt. Biên soạn và chạy. http://developers-blog.org/blog/default/2010/11/08/Embed-Ivy-How-to-use-Ivy-with-Java thật tuyệt vời. Cảm ơn tôi sẽ đi với điều này –

+0

Đừng quên đánh dấu đây là câu trả lời nếu đây là giải pháp của bạn – Noremac

Các vấn đề liên quan