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ファイルに書き込む方法についてです。書き込みたいデータ、つまり上記のリストを取得する方法について質問しています。
このコマンドは、Mavenプロジェクトの依存関係ツリーを生成します。
$ mvn dependency:tree
私はあなたが結果を好きになると確信しています:-)
私の知る限り、コンマを使用し、スペースを使用しないと、正確にその出力を取得できません。 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
あなたが求めているコマンドは次のとおりです
$ 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:*'
実際には、jarの最終リストだけを使用します。
mvn dependency:list
これは、詳細な推移的ツリーと競合解決(詳細な)を示すため、最終的なリストを取得するだけの過剰な依存関係:ツリーよりもはるかに単純です。
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>
私はここで何かを見逃しているかもしれませんが、すでにコピー依存関係を使用しているので、あなたが本当に望んでいるのは、指定されたディレクトリ内のファイルのリストにすぎないようです。
Antは、シェルスクリプトと同様に、問題なくこれを実行できます。
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
、クラスパスにフォーマットするには| 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]
}