2016-04-07 15 views
1

レガシープロジェクトをMavenに移行する際、次の問題が発生しています。Mavenプロジェクトの依存関係の一覧をJavaクラスに取得する方法

xyzとサブプロジェクトp1、p2というコアプロジェクトがあります。コアプロジェクトにサブプロジェクトを追加するには、サブプロジェクトのjarをコアプロジェクトに追加するだけです。このコアプロジェクトが開始されると、コアプロジェクトのWEB-INF/libディレクトリにあるすべてのjarのMANIFESTファイルを確認して、サブプロジェクトがあるかどうかを調べます。

Mavenのプロジェクト構造では、libディレクトリがありません。どのようにしてコアプロジェクトで(パスを使用して)使用されているすべてのjarのリストを取得できますか?

何か助けていただければ幸いです。

答えて

0

Maven依存関係プラグインは、プロジェクトのすべての依存関係を推移的なものとして表示します。試してみてください:あなたは、実行時に依存関係を把握する必要がある場合

$ mvn dependency:tree 

が、(あなたのプロジェクトがMavenの幹部によって開始されたときに、Mavenのは、あなたのための設定)クラスパスを検査することが可能でなければなりません。カスタムクラスローダなしのJava SEアプリケーションの場合は、以下が動作するはずです:

ClassLoader cl = ClassLoader.getSystemClassLoader(); 

    URL[] urls = ((URLClassLoader) cl).getURLs(); 
    for (URL url : urls) { 
     System.out.println(url.getFile()); 
    } 
+0

こんにちは@Gunther、あなたのソリューションは、私のために働きましたあなたのコード。 ClassLoader.getSystemClassLoader()の代わりに、 "ClassLoader cl = getClass()。getClassLoader();"を使用しました。 ありがとうございます。 –

1

各プロジェクトのpom.xmlをご覧ください。

これはMaven(その1つ)の美しさです。すべての依存関係がそこにリストされているので、別のディレクトリプロジェクトで狩りをする必要はありません。

実際にダウンロードしたファイルを見つける必要がある場合は、maven homeフォルダ(MAVEN_HOMEまたはM2_HOME)にチェックインする必要があります。

0

あなたが重なって瓶を見つけるためにjHadesを使用することができます:私はに少し変更を加えたときhttp://jhades.org/

<dependency> 
    <groupId>org.jhades</groupId> 
    <artifactId>jhades</artifactId> 
    <version>1.0.4</version> 
</dependency> 

new JHades() 
.printClassLoaders() 
.printClasspath() 
.overlappingJarsReport() 
.multipleClassVersionsReport() 
.findClassByName("org.apache.bval.jsr303.ApacheValidationProvider") 
.findClassByName("javax.validation.spi.ValidationProvider"); 
関連する問題