2012-06-05 34 views
5

我在寫一個應用程序,需要我下載給予mavens groupid/artifactid/version的jar。如何通過編程方式使用maven下載jar

我現在開始

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

所以給出的POM的URL,我現在代表它maven的模型對象。這似乎運作良好。

我會想做什麼知道的是兩兩件事:

  1. 找到JAR神器,該模型代表了Maven倉庫的Maven插件將使用
  2. 給出了該模型的網址,找到代表本地存儲庫中jar的文件

我已經有質量差的解決方案:我去mvnrepository.com手工編碼url,並且使用〜/ .m2/repository作爲文件的前綴。我顯然可以改進這個解決方案,但是我最終會糟糕地複製那些經過很好測試並且在Maven代碼庫中很好使用的代碼。

我真的想知道如何使用maven類來做到這一點。

我已經做了一些公平的谷歌搜索,但尋找有關maven和jar(甚至在stackoverflow)上的任何有趣的事情是,我發現很多有關如何使用maven的解決方案,而不是如何使用代碼Maven類。

感謝您的幫助

+0

Maven同時下載所有罐子的Nexus倉庫管理器在他的pom.xml中指定的文件。 –

+0

也可以看看[jcabi-aether](http://www.jcabi.com/jcabi-aether/),它可以幫助你更輕鬆地做到這一點,並且不需要代碼 – yegor256

回答

2

從Maven倉庫是打算用Aether lib下載文物。

參見http://www.sonatype.com/people/category/aether/

此外,還有examples如何做事和乙醚LIB的完整源代碼。 更長的時間以前我用Oether的一點點。

+0

嗯,我已經度過了一段不快樂的幾個小時和Aether一起玩。有沒有教程或任何地方的博客?演示不會編譯,它們所命名的類似乎不存在。我會繼續多幾個小時,然後把我的頭放在桌子上:) –

+0

是的,看看裏面:https://github.com/sonatype/sonatype-aether/tree/master/aether-demo – khmarbaise

+0

這是一個如何使用代碼的一些解釋,以及鏈接到示例插件的鏈接:http://www.sonatype.com/people/2011/01/how-to-use-aether-in-maven-plugins/ – Noremac

5

選項1

khmarbaise推薦的以太。

它附帶的Maven 3.0

選項2

如果你想要一個簡單的解決方案,通過命令行或shell腳本中下載的Maven模塊的本地庫,Apache的常春藤有standalone罐子。

例子:

using IVY dependencies manager programmatically

選項3

如果你只是尋找一個Maven的罐子,不關心依賴管理是更簡單。

下面是如何獲取的log4j罐子直接從Maven的中央:

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

如果你使用它有一個有用的REST API

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

+0

我不得不說,常春藤的方法工作得很好。編譯並運行。 http://developers-blog.org/blog/default/2010/11/08/Embed-Ivy-How-to-use-Ivy-with-Java非常好。謝謝,我將與此 –

+0

不要忘記標記這是答案,如果這是你的解決方案 – Noremac

相關問題