簡體   English   中英

Maven中的依賴jar文件列表

[英]List of dependency jar files in Maven

使用 Maven 2,有沒有一種方法可以將 jar 依賴項作為文件名列出?

mvn dependency:build-classpath 

可以列出 jar 文件,但這將包括它們在我的本地存儲庫中的位置的完整路徑。 我需要的本質上只是一個文件名列表(或復制依賴項目標復制的文件名)。

所以我需要的清單類似於

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

理想情況下作為 maven 屬性,但我想,可以生成諸如 build-classpath 之類的文件就可以了。

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

澄清一下:問題在於如何將清單標頭寫入 jar 中的 MANIFEST.MF 文件(這很容易用 googleble 搜索)。 我在問如何獲取我要寫入的數據,即上面顯示的列表。

此命令將生成 Maven 項目的依賴關系樹:

$ mvn dependency:tree

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

盡我所知,您無法獲得准確的輸出,其中包含逗號且沒有空格。 無論是通過命令行還是通過 pom.xml 文件,如果您指定空格或 ''(空字符串)作為pathSeparatorfileSeparator的替代品,maven-dependency-plugin 或 CLI pathSeparator fileSeparator 因此,您可能會被迫達成某種妥協。 你可以

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

並將其附加到generate-resources階段稍后通過在生命周期的process-resources階段設置正確的屬性來過濾該資源,您應該能夠只得到逗號。

您可以在以下位置查看完整的選項列表: http://maven.apache.org/plugins/maven-dependency-plugin/build-classpath-mojo.html

實際上,對於罐子的最終列表,只需使用

mvn dependency:list

這比dependency:tree簡單得多,因為它顯示了詳細的傳遞樹和沖突解決方案(詳細說明),所以簡單地獲取最終列表是一種矯枉過正。

這是附加參數文檔

這是你要求的命令

$ mvn dependency:tree

對於大型項目,它可以輸出大量文本。 我假設您想檢查依賴樹是否包含某個依賴項,因此您不需要完整列表。

以下是在 Windows 上過濾輸出的方法:

$ mvn dependency:tree | findstr javax.persistence

以下是在 Linux 上執行此操作的方法:

$ mvn dependency:tree | grep javax.persistence

Maven 過濾依賴樹的方法(適用於 Windows cmd、MacOS 和 Linux shell):

$ mvn dependency:tree -Dincludes=javax.persistence:*

Maven 方式(Windows PowerShell):

$ mvn dependency:tree '-Dincludes=javax.persistence:*'

你看過Apache Felix項目嗎? 它有一大堆插件,包括一個可以做你想做的插件

另外,您是否嘗試過帶有<manifestFile><addClasspath>標簽? 這應該具有將類路徑合並到清單中的預期效果。

<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>

我可能在這里遺漏了一些東西,但是由於您已經使用了復制依賴項,因此聽起來您真正想要的只是指定目錄中的文件列表。

Ant 可以毫無問題地為您執行此操作,shell 腳本也可以。

Maven 可以自動在您的清單中構建類路徑: http : //maven.apache.org/guides/mini/guide-manifest.html

它是 Maven 歸檔插件的配置。

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

這是一個用於管道mvn dependency:list的 awk 腳本:

mvn dependency:list | awk -f mvnfmt.awk

你可以| sort | sort如果你想按名稱排序,或者| tr '\\n' ':' | tr '\\n' ':'將其格式化為類路徑。

mvnfmt.awk是:

BEGIN {
    found = 0
}

/The following files have been resolved/ {
    found = 1
    next
}

/^\[INFO\] \$/ {
    print "Empty " found
    if (found != 0) found = 0
}

{
    if (!found) next
    n = split($0, a, " ")
    if (n != 2) {
        found = 0
        next
    }
    split(a[2], a, ":")
    print a[2] "-" a[4] "." a[3]
}   

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM