2012-07-25 29 views
9

Tôi đang cố truy xuất toàn bộ cây phụ thuộc và poms của chúng bắt đầu từ gốc của dự án. Tôi bắt đầu với một POM đã tồn tại trong hệ thống tập tin của tôi, nhưng tôi không chắc chắn làm thế nào để lấy poms phụ thuộc từ kho lưu trữ.Làm cách nào tôi có thể truy cập vào Maven Artifact POM bằng cách sử dụng Java API của Maven?

Tôi đang sử dụng mã sau để truy cập danh sách phụ thuộc. Từ danh sách, tôi có tất cả thông tin về các hiện vật. Tôi chỉ không chắc chắn làm thế nào để truy cập vào kho lưu trữ.

FileReader reader = null; 
Model model = null; 
MavenXpp3Reader mavenreader = new MavenXpp3Reader(); 

File pomfile = new File("pom.xml"); 

model.setPomFile(pomfile); 
MavenProject project = new MavenProject(model); 

List<Dependency> deps = project.getDependencies(); 

// Get dependency details 
for (Dependency d: deps) {   
    System.out.print(d.getArtifactId()); 
    System.out.print(":"); 
    System.out.println(d.getVersion()); 
}   

Trả lời

1

May mắn thay không phải là tầm thường :-) Tôi có thể cung cấp cho bạn một số lời khuyên mặc dù (có tính đến bạn chỉ cần tạo phẩm từ repo trung tâm).

Đây là một số tuyệt vời example code Tôi tìm thấy tại Github. Một giải pháp thay thế có thể sử dụng số REST API of the central repo. Dưới đây là ví dụ về cách do that programmatically.

BTW nếu bạn cần sự phụ thuộc duy nhất, bạn cũng có thể sử dụng maven-dependency-plugin trực tiếp (điều này được gọi là trên ví dụ mvn dependency:tree - xem this thread cho một ví dụ).

Có lẽ phương pháp của bạn cũng có thể hoạt động, nhưng tôi đoán nó cần một số phần còn thiếu.

+0

Tôi thực sự đang cố gắng lập trình lấy poms từ kho lưu trữ cục bộ của mình (không phải kho lưu trữ trung tâm) bằng API Maven. Tôi có thể tìm kho lưu trữ cục bộ thông qua hệ thống tệp, nhưng điều này cần để có thể làm việc ở bất kỳ đâu với bất kỳ người dùng nào, vì vậy tôi nghĩ rằng API sẽ thích hợp hơn. – davdic

+0

@ rlegendi Tôi không biết trường hợp sử dụng của bạn nhưng nếu bạn chỉ cần phụ thuộc của một số thư viện maven công khai, bạn có thể sử dụng API VersionEye: https://www.versioneye.com/api?version=v2. Nó là một API REST REST và rất dễ sử dụng. –

+0

@RobertReiz Bạn có muốn giải quyết nhận xét của mình cho @davdic không? :-) Dù sao, thx cho các liên kết, nhưng có vẻ như thương mại và một sản phẩm beta. – rlegendi

2

Thực ra bạn đã khá gần với việc đọc các phụ thuộc. Tất cả những gì đã mất tích là:

Model model = mavenreader.read(new FileReader(pomFile)); 

Full dụ:

MavenXpp3Reader mavenreader = new MavenXpp3Reader(); 

File pomfile = new File("pom.xml"); 
Model model = mavenreader.read(new FileReader(pomFile)); 

List<Dependency> deps = model.getDependencies(); 

for (Dependency d: deps) {   
    System.out.print(d.getArtifactId()); 
} 

này không giúp bạn có được một cây phụ thuộc nhưng bạn có thể lặp lại điều đó cho các phụ thuộc bạn tìm thấy.

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