0

これはダムと聞こえるかもしれません。しかし、Mavenのデフォルトバインディングファイルを編集または更新する方法はありますか?ローカルのMavenのdefault-bindings.xmlを更新する方法はありますか?

/META-INF/plexus/default-bindings.xml

私はそれをしたいと思うのはなぜ?


背景 -

  • 私はIntelliJの内のホームディレクトリとして私のマシン上で最新のmaven version 3.3.9を使用しています。

  • 外部プラグインが指定されていないtestng-testモジュールがあります。モジュールのpom.xmlを見てみましょう:

    <artifactId>testng</artifactId> 
    
    <dependencies> 
        <dependency> 
         <groupId>org.testng</groupId> 
         <artifactId>testng</artifactId> 
         <version>6.9.13.6</version> 
        </dependency> 
    </dependencies> 
    
  • および類似のpom.xmlが異なる依存してjunit-testという名前の別のモジュールを次のように:

    <artifactId>junit</artifactId> 
    
    <dependencies> 
        <dependency> 
         <groupId>junit</groupId> 
         <artifactId>junit</artifactId> 
         <version>4.12</version> 
        </dependency> 
    </dependencies> 
    
  • 私は、これらの内の2つの空のクラスを追加しましたモジュール(@Testメソッドやクラスはまだありません)。


活動 - 今、私はmvn clean installを使用して、これらの各モジュールを構築しようと、モジュールjunit-testは、正常にビルドが、モジュールtestng-testは、次のログで失敗したときに

[INF O] --- maven-resources-plugin:2.6:resources(デフォルトリソース)@ testng ---

[INFO] --- maven-compiler-plugin:3.1:@ testngをコンパイルします(デフォルトコンパイル)。 ---

[INFO] ---のmaven-リソース - プラグイン:2.6:TestNGの@ testResources(デフォルト-testResources)---

[INFO] ---のmaven-コンパイラプラグイン:3.1: TestNGの@ testCompile(デフォルト-testCompile)---

[INFO] --- のmaven-確実な-プラグイン:2.12.4:テスト(デフォルト検定)の試験@ NG ---

し、それがSurefireReflectionExceptionに実行します - TestNG6 を実行

org.apache.maven.surefire.util.SurefireReflectionException: にjava.lang.reflect.InvocationTargetException。ネストされた例外は java.lang.reflectです。InvocationTargetException:sun.reflect.DelegatingMethodAccessorImpl.invokeでsun.reflect.NativeMethodAccessorImpl.invokeでsun.reflect.NativeMethodAccessorImpl.invoke0でヌル にjava.lang.reflect.InvocationTargetException (ネイティブメソッド) (NativeMethodAccessorImpl.java:62) ( )。 at java.lang.reflect.Method.invoke org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) (org.apache.maven)の で、 surefire.booter.ForkedBoot org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75) で をer.runSuitesInProcess(ForkedBooter.java:115)によって引き起こした:org.apache.maven.surefire.testset.TestSetFailedException: 不明


TestNGのバージョン6.9.13.6を試みた - 私は気づいた私は、明示的に<plugins>プロパティに2.19.1maven-surefire-plugin用のプラグインのバージョンを更新する場合、物事はうまく動作します

へ。

しかし、プロジェクトのプラグインバージョンを明示的にオーバーライドしたくない場合は、どうすれば私のプロジェクトの最新のバインディング(少なくともこれらは修正されます)を使用して回避できますか?

デフォルトのバインディングを見ると、私はMavenのためのdefault-bindings.xmlファイルにあるバインディングを source codeで見ることができましたが、私は私のインストールMavenのフォルダ内にそれを見つけるのはどちらか編集して更新することが可能であることができません。

デフォルトでは、プロジェクトリスト上の任意のMavenモジュールに対して実行するプラグインのバージョンを(デフォルトで)選択するためのデフォルトのバインディングを選択できますか?あなたがオーバーライドに任意のプロジェクトの特定のpom.xmlファイルを修正するwihtout のmaven-確実な - プラグインのバージョンをバージョンを上書きしたいよう

+0

?共通の親POMの中に入れて、すべての子がそれを継承するようにすることができます。 – Tunaki

+0

@Tunakiは、このような場合に複数のプロジェクトを検討し、複数のPOMを編集することを検討しています。私は、プラグインのバージョンを指定するとそれを解決することに同意します。しかし、既存のすべてのプロジェクトでプラグイン(デフォルト)バージョンを変更したい場合はどうすればいいですか? – nullpointer

+0

すべてのプロジェクトに親があるか、BOMをインポートします。それがプラグインのバージョンをロックダウンする方法です。 – Tunaki

答えて

0

が見えます。これを実現するには、ローカルインストールを拡張する必要があります。 Mavenはsuper pomの概念を持ち、pom(親なし)は暗黙的に拡張されています。

親のPOMもプロジェクトのPOMもすべて変更しないので、左のオプションだけがデフォルトのPOMを上書きするようです。オーバーライドバインドがあまりにも役立つかどうかはわかりません。しかし、あなたは、あなたのニーズを満たすために次の手順を実行することによって、スーパーPOMをオーバーライドすることができます。

1)Mavenの3.xバージョン用default pom file(ディレクトリの内容)をコピーして、スーパーポンポンファイル(POM-4.0.0.xml)を作成します。

\---org 
    \---apache 
     \---maven 
      \---model 
        pom-4.0.0.xml 

2)のmaven-確実なのエントリを追加します。下記のように必要なバージョンのプラグインをインストールします。

... 
<pluginManagement> 
... 
<plugins> 
    <plugin> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.19</version> 
    </plugin> 
    </plugins> 
</pluginManagement> 
... 

3)mycompany.superpom.jarがあなたのポンポンのファイルをパッケージ化すると言う、jarファイルを作成します。

jar -cf mycompany.superpom.jar . 

4)$ MAVEN_HOME \ lib \ extディレクトリにjarを置きます。

5)実行する必要があります。すべてのプロジェクトで、指定されたバージョンのmaven-surefire-pluginが使用されます。

これが役に立ちます。

+0

上記のステップ1と4を例を挙げて詳しく説明してください。今は少し不明です。 のapache-mavenの-3.3.9 \ \ TOOLSと現在の作業ディレクトリは次のとおりです: \t D: – nullpointer

+0

は、Mavenのがにインストールされていると仮定すると、 \t D:\ TOOLS \t コマンド: 1.デフォルトを抽出し、新しい空のディレクトリを作成します。その中にpom.xmlファイルがあります。 \t mkdir mycompany.superpom&cd mycompany.superpom&jar xf .. \ apache-maven-3.3.9 \ lib \ maven-model-builder-3.3.9.jar org/apache/maven/model/pom-4.0。 0.xml 2. pom-4.0.0.xmlファイルを変更して、maven-surefire-pluginのエントリを追加します。 3. jarファイル内で修正されたpom.xmlファイルをパッケージ化します。 \t jar -cf mycompany.superpom.jar。 4. MAVEN Extディレクトリのjarファイルをコピーします。 \t copy mycompany.superpom.jar .. \ apache-maven-3.3.9 \ lib \ ext – skadya

0

ファイルがjarファイル内であること:

${MAVEN}/lib/maven-core-3.3.9.jar 

ので:

はPOMでのプラグインのバージョンを指定することの何が問題になってい
${MAVEN}/lib/maven-core-3.3.9/META-INF/plexus/default-bindings.xml 
関連する問題