2016-08-18 10 views
0

pom.xmlファイルが与えられた場合、推移的な依存関係を展開し、それぞれの直接的および推移的な依存関係に対して、どのリポジトリがフェッチしているかをリストしますそれから。 maven-dependency-pluginmaven依存関係のリストとそれらがフェッチされたリポジトリを取得する方法

私は推移依存関係ツリーを取得するために

mvn dependency:treeを行うことができますが、何のリポジトリ情報は、使用するリポジトリーのリストを取得するには

mvn dependency:list-repositories

が含まれていないが、何の依存関係の情報が含まれていない

mvn dependency:get -Dartifact=<...>は単一のアーティファクトと推移的な依存関係をフェッチする必要がありますが、それは必要以上に多くのフェッチをしているように見えます。

+0

解決したい問題はありますか? – khmarbaise

+0

推移依存性解決をサポートしていないBazelを使用するように私たちのコードベースを移行しようとしています。私はmavenを使って依存関係を解決し、出力を使ってダウンロードと依存関係のためのBazelルールを生成し、Bazelにダウンロード作業をさせたいと思います。 – Yunchi

答えて

1

私はそれをするプラグインはないと思います。そして私はその理由は、誰もその種の情報に本当に関心がないということだと思います。

人工物に依存することを検討してください。ローカルリポジトリにダウンロードされると、Mavenはそれらを再度ダウンロードすることはありません(削除しない限り)。そのアーティファクトへの今後のすべての決議は地方のレポを介して行われます。

確かに、それは、その実際のURLまたは時間をかけて同じではないかもしれないかもしれない、からダウンロードしたレポの象徴名前が含まれています、あなたの地元のレポのアーティファクトディレクトリ内のファイル_remote.repositories

これは、Mavenの座標がグローバルであるということです。たとえば、特定のリリース(たとえば)commons-codec:commons-codec:1.10は、どこから来たのかにかかわらず同じでなければなりません。それ以外の場合、特定のリリースがどこから来たのかによって異なる場合は、すべてが崩れてしまいます。このため、依存関係がどこから来たのかは誰も気にしません。

スナップショットの依存関係は別の話ですが、今後変更される可能性のある依存関係に基づいてスナップショットをリリースしたくないため、スナップショットの依存関係は長すぎます。通常、スナップショットの依存関係がどこから来るのかを制御していますので、の部分は、の依存関係が無駄になっています。

ただし、推移的な依存関係には、Mavenがサブ依存関係を取得するための追加のreposを指定するPOMが含まれることがあります。そして、時にはこれらのリポジトリは独立しているか、または中断され、依存関係のチェーンを破ります。その場合は、settings.xmlでブロックまたは再ルーティングすることができます。あなたの地元のレポにあるすべてのPOMによる簡単なスキャンは、通常、それらを嗅ぎ分けるために十分である:

# Linux/Unix 
%> find <your local repo> -name '*.pom' | xargs grep -c '<repositories>' | grep -v ':0' 

これは、一緒にmvn dependency:treeと、推移的依存性が誤動作リポジトリに依存しているかどうかを確認するために十分でなければなりません。

+0

詳細な回答ありがとうございます。私のユースケースでは、少なくとも完全な依存ツリーが必要です(質問に対する私のコメントを参照してください)。 'mvn dependency:tree'は、depがすでにpom.xmlに直接依存している場合、推移的依存関係を報告しません。ツリー全体を列挙するように強制する方法はありますか? – Yunchi

+0

'mvn dependency:tree -Dverbose = true'はこのトリックを行うべきです。 – Daniel

関連する問題