2017-12-28 19 views
1

私のJavaのMavenプロジェクトは、サブプロジェクトの束が含まれている依存関係を見つけるための方法は、すべてのプロジェクトのpom.xmlファイルには、以下の、バージョン指定されていない明示的に

 
|- parent 
    |- core 
      |- db 
      |- xml 
    |- util 
    |- config 

のようなものがありますいくつかの依存関係が定義されています。ただし、それらのうちのほんの一部については、<version/>が指定されています。あなたが見ることができるように例

<dependencyManagement> 
    <dependencies> 
    <dependency> 
     <groupId>org.apache.ant</groupId> 
     <artifactId>ant</artifactId> 
     <version>1.9.7</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.xmlbeans</groupId> 
     <artifactId>xmlbeans</artifactId> 
    </dependency> 
    </dependencies> 
</dependencyManagement> 

について、org.apache.antため、versionを明示的に1.9.7として言及されています。ただし、org.apache.xmlbeansの場合、いくつかの要因に基づいてバージョンが自動的に推測されます。これは便利な機能ですが、サードパーティのライブラリプロジェクトが非常にアクティブで、他の依存関係を持つ可能性がある場合は、バージョンを予測できないことがあります。

したがって、問題は、ではないのすべての依存関係が明示的に指定されたversionであることを確認したいのです。

私はhelp:effective-pomを試しました。すべてのサブプロジェクトのすべての依存関係を一覧表示しますが、推測されるバージョンも出力します。

effective-pomの亜種を見ていますが、明示的に指定されていない限り、すべてのサブプロジェクトのすべての依存関係を再帰的に一覧表示しますが、自動的にバージョンを取得しません。このようなリスト(xml形式)を取得したら、XML出力にいくつかのxqueriesを適用して、必要なものを除外して必要な変更を加えることができます。

編集: <version>タグを持たない依存関係を探しています。それはまだ大丈夫です(?)私のための範囲は、私はMavenのから直接これを処理する方法を知っていませんが、全体POMファイルにXPathを使用して試すことができますRanges

+0

dependencyManagementは依存性を宣言するためのものではないため、依存性管理のバージョンに依存しますが、バージョンがない場合は依存性があります。バージョンが実際に宣言されると、どちらもうまく動作します。あなたの質問が本当に何を意味するかわからない –

+0

バージョンなしでdependencyManagementで依存関係を定義し、警告が出ない場合は、依存関係はすでに他の場所(おそらく親)に定義されています。そうでなければ、バージョンなしの依存関係についての警告が表示されます... – khmarbaise

+0

合意@アドリアンズム。そして、それはあなたのコメントが私に考えさせたものです。私の不安定なビルドのようなものは、依存性の予測不可能なバージョンによるものではありません。おそらく、[プラグインの自動解決](https://cwiki.apache.org/confluence/display/MAVEN/Maven+3.x+Compatibility+Notes#Maven3.xCompatibilityNotes-AutomaticPluginVersionResolution)が原因です。ありがとう! –

答えて

0

を使用して指定されている場合。この式を使用してみてください:

//dependency[not(version)] 

これはは、子ノード<version>が含まれていないすべての<dependency>のノードを返します。

+0

私はそれを試みましたが、私は100 pom.xmlのように複数の階層的なフォルダにあります。 xpath/xqueryを 'pom.xml'の_each_で実行するのは現実的ではありません。 –

+0

@RakeshNこのXPath式で各POMファイルをスキャンするJavaコードを書くことができます。強盗他の誰かが純粋なMavenソリューションを提供していない限り、私はこの答えを最善の可能性として残しておきます。 –

+0

@RakeshNそれは合理的な解決策です。プラットフォームに応じて、これをスクリプト化することができます。 Linuxの場合、findとxmlstarletを組み合わせると、これは本当に簡単になります。 –

関連する問題