web-dev-qa-db-ja.com

Mavenの依存関係jarファイルのリスト

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ファイルに追加します。 (質問に答えるためにこのビットを理解する必要はないはずです。)

明確にするために:問題はnot jar(簡単にグーグルで)のマニフェストヘッダーをMANIFEST.MFファイルに書き込む方法についてです。書き込みたいデータ、つまり上記のリストを取得する方法について質問しています。

58

このコマンドは、Mavenプロジェクトの依存関係ツリーを生成します。

$ mvn dependency:tree

私はあなたが結果を好きになると確信しています:-)

70
Anis

私の知る限り、コンマを使用し、スペースを使用しないと、正確にその出力を取得できません。 pathSeparatorまたはfileSeparatorの代わりにスペースまたは ''(空の文字列)を指定すると、コマンドラインおよびpom.xmlファイルを介して、maven-dependency-pluginまたはCLIが異常終了します。そのため、妥協点に達することを余儀なくされる場合があります。あなたはできる

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

ただし、これにより、'::'だけでなく','で区切られた完全なリストが表示されますが、機能します。実行する場合:

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

andこれをgenerate-resourcesフェーズに添付しますandフィルタ後でライフサイクルのprocess-resourcesフェーズで正しいプロパティを設定することにより、shouldだけでコンマを取得できます。

オプションの完全なリストは次の場所で見ることができます: http://maven.Apache.org/plugins/maven-dependency-plugin/build-classpath-mojo.html

18
Gabe Mc

あなたが求めているコマンドは次のとおりです

$ 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:*'
9
naXa

実際には、jarの最終リストだけを使用します。

mvn dependency:list

これは、詳細な推移的ツリーと競合解決(詳細な)を示すため、最終的なリストを取得するだけの過剰な依存関係:ツリーよりもはるかに単純です。

7
kisna

Apache Felix プロジェクトを見ましたか? バンドルプラグイン を含む、プラグインの混乱があります。

また、<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>
5
sblundy

私はここで何かを見逃しているかもしれませんが、すでにコピー依存関係を使用しているので、あなたが本当に望んでいるのは、指定されたディレクトリ内のファイルのリストにすぎないようです。

Antは、シェルスクリプトと同様に、問題なくこれを実行できます。

3
Kevin Wright

Mavenはマニフェストにクラスパスを自動的に構築できます。 http://maven.Apache.org/guides/mini/guide-manifest.html

これは、Mavenアーカイブプラグインの構成です。

2
Davide Gualano

既存の回答にノッチを追加するために、現在のmaven-dependency-pluginで outputProperty パラメーターを使用してクラスパスをプロパティに保存できます。

1
Andrew

mvn dependency:listをパイプするawkスクリプトは次のとおりです。

mvn dependency:list | awk -f mvnfmt.awk

名前でソートする場合は| sort、クラスパスにフォーマットするには| 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]
}   
0
Matthieu