2008-11-10 47 views
47

使用Maven 2,有沒有一種方法可以列出jar依賴關係作爲文件名?Maven中依賴關係jar文件的列表

mvn dependency:build-classpath 

可以列出這些jar文件,但是這將包括它們在我的本地存儲庫中的位置的完整路徑。我需要的僅僅是文件名稱的列表(或複製依賴目標複製的文件名稱)。

所以我需要的清單可能會像

activation-1.1.jar,antlr-2.7.6.jar,aopalliance-1.0.jar etc... 

理想的行家財產,但我想,一個文件如積聚classpath中產生會做。

我試圖實現的是將Bundle-ClassPath寫入一個OSGi包的手動維護的MANIFEST.MF文件。 (你不應該需要了解這一點來回答這個問題。)

澄清:現在的問題是如何清單標題寫入在一個罐子裏的MANIFEST.MF文件(即容易googleble) 。我在詢問如何獲取我想要寫入的數據,即上面顯示的列表。

+0

只是提交一個補丁的依賴插件,我會運用它到下一個版本。構建類路徑是最接近你想要的東西,我們只需要調整選項來獲得所需的輸出。 – 2009-04-19 02:09:58

回答

5

你看過Apache Felix項目嗎?它有一大堆插件,包括一個bundle plugin應該做你想做的。

另外,你有沒有試過<addClasspath>標籤<manifestFile>?這應該具有將類路徑合併到清單中的效果。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    ... 
    <configuration> 
    <archive> 
     <addClasspath>true</addClasspath> 
     <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile> 
    </archive> 
    </configuration> 
    ... 
</plugin> 
+0

我知道阿帕奇菲利克斯,但那不是我所需要的,這就是我手動做這件事的原因。 – 2008-11-11 11:29:28

+0

addClasspath會將一個jar列表添加到Class-Path清單頭部,我沒有看到maven-jar-plugin文檔提到能夠將類路徑放入其他頭部。此外,Bundle-Classpath需要的不僅僅是一個罐子列表。 – 2008-11-11 11:30:07

16

盡我所知,你不能得到完全的輸出,用逗號和空格。無論是通過命令行還是通過pom.xml文件,如果您指定空格或用'0123(空字符串)替代pathSeparatorfileSeparator,maven-dependency-plugin或CLI會嚇壞了。所以,你可能會被迫達成某種妥協。您可以

 
    mvn dependency:build-classpath -Dmdep.pathSeparator=":" -Dmdep.prefix='' -Dmdep.fileSeparator=":" -Dmdep.outputFile=classpath 

然而,應該讓你一個完整的清單,由'::',而不是僅僅','分開了,但它的工作原理。如果你運行:

 
    mvn dependency:build-classpath -Dmdep.pathSeparator="@REPLACEWITHCOMMA" -Dmdep.prefix='' -Dmdep.fileSeparator="@" -Dmdep.outputFile=classpath 

在生命週期的process-resources階段設置正確的屬性附加至該generate-resources階段過濾器,資源後,你應該能夠得到公正的逗號。

你可以看到選項的完整列表:http://maven.apache.org/plugins/maven-dependency-plugin/build-classpath-mojo.html

2

我可能失去了一些東西,但你已經使用複製的依賴,它聽起來就像你真的以後有什麼只是一個列表指定目錄中的文件。

Ant可以爲您做到這一點,沒有任何問題,shell腳本也可以。

58

此命令會在Maven項目的依賴關係樹:

$ mvn dependency:tree 

我相信你會喜歡的結果:-)

1

要將缺口添加到現有的答案,目前的maven-dependency-plugin允許使用參數outputProperty將類路徑保存爲屬性。

0

這裏是你問

$ mvn dependency:tree 

因爲它可以輸出大量的文本的大型項目的命令。我假設你想檢查依賴關係樹是否包含一定的依賴關係,所以你不需要一個完整的列表。

這裏是你如何可以在Windows過濾輸出:

$ mvn dependency:tree | findstr javax.persistence 

這裏是你如何能做到這一點在Linux上:

$ mvn dependency:tree | grep javax.persistence