2012-07-25 79 views
9

我正在嘗試從項目的根目錄中檢索整個依賴關係樹和它們的poms。我從我的文件系統中已經存在的POM開始,但我不知道如何從存儲庫中檢索依賴項。如何使用Maven的Java API訪問Maven Artifact POM?

我正在使用下面的代碼來訪問依賴項列表。從列表中我可以看到有關這些工件的所有信息。我只是不確定如何訪問存儲庫。

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()); 
}   

回答

1

Unfotunately這不是小事:-)我可以給你一些建議,但(考慮到,你只需要在中央回購文物帳戶)。

這是一個很棒的example code我在Github找到了。另一種方法是使用REST API of the central repo。這裏有一個例子如何do that programmatically。如果您只需要依賴關係,則還可以直接使用maven-dependency-plugin(例如,在例如mvn dependency:tree上調用該功能 - 有關示例,請參見this thread)。

也許你的方法也可以工作,但我想它需要一些缺失的部分。

+0

我實際上正在嘗試使用Maven API從本地存儲庫(不是中央倉庫)檢索poms。我可以通過文件系統查找本地存儲庫,但這需要能夠在任何用戶的任何地方工作,所以我認爲API會更合適。 – davdic 2012-07-26 15:04:48

+0

@rlegendi我不知道你的用例,但如果你只需要一些公共maven庫的依賴關係,你可以使用VersionEye API:https://www.versioneye.com/api?version = v2。這是一個REST JSON API,非常易於使用。 – 2013-07-30 10:22:13

+0

@RobertReiz你不想把你的評論發給@davdic嗎? :-)無論如何,thx的鏈接,但它似乎是商業和測試版產品。 – rlegendi 2013-08-05 09:55:59

2

其實你很接近閱讀依賴。所有這一切都缺少的是:

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

完整的示例:

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()); 
} 

這不會讓你一個依賴關係樹,但你能重複一次爲您找到的依賴關係。