2009-11-20 8 views
73

私のプロジェクトのPOM親ファイルでは、このプロジェクトに役立ついくつかの設定を定義するプロファイルがあります。Maven:親POMのプロファイルに既に定義されているプラ​​グインの設定を上書きすることは可能です

<profile> 
<id>wls7</id> 
... 
<build> 
    <plugins> 
    <!-- use java 1.4 --> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <configuration> 
     <fork>true</fork> 
     <source>1.4</source> 
     <target>1.4</target> 
     <meminitial>128m</meminitial> 
     <maxmem>1024m</maxmem> 
     <executable>%${jdk14.executable}</executable> 
     </configuration> 
    </plugin> 
    </plugins> 
</build> 

... 
</profile> 

をしかし、私のプロジェクトで、私はテスト・クラスをコンパイルするためにjdk4の代わりにJDK5使用するために、Mavenのコンパイラ・プラグインの設定を上書きしたいと思います:「Tは、この親POM)を取り除きます。

私は私のプロジェクトのPOMでこのセクションやった理由です:

<profiles> 
    <profile> 
    <id>wls7</id> 
     <activation> 
      <property> 
       <name>jdk</name> 
       <value>4</value> 
      </property> 
     </activation> 
    <build> 
     <directory>target-1.4</directory> 
     <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <executions> 
      <execution> 
       <id>my-testCompile</id> 
       <phase>test-compile</phase> 
       <goals> 
       <goal>testCompile</goal> 
       </goals> 
       <configuration> 
       <fork>true</fork> 
       <executable>${jdk15.executable}</executable> 
       <compilerVersion>1.5</compilerVersion> 
       <source>1.5</source> 
       <target>1.5</target> 
       <verbose>true</verbose> 
       </configuration> 
      </execution> 
      </executions> 
     </plugin> 
     </plugins> 
    </build> 
    </profile> 
       ... 
</profiles> 

、それが働いていないが...

私も(私のPOMの定期的なプラグインセクションで設定を上書きしようとしました私は、特定のプロファイルではなく、私のPOM全体で)を意味します。

何が問題なのですか?私は多くの、多くの プロパティが必要があるので、(その中

    定義された私は親 POMおよびプロファイル(wls7)を取り除くためにしたくない
  • は私の要件のいくつかを明確にするために、構成、...)と 私の 会社のプロセスではありません。

  • 親POMおよび/またはプロファイル を複製することに基づく解決策は、 ではありません。親のPOMが
    の責任を負う場合、私は
    を鉱山で報告する必要があります。

私はそれがmaven2で可能であるべきだと思うので、それは単なる継承の問題です(プロファイルを拡張するか、上のPOMからの設定を上書きします)。

+0

? –

+0

プロファイルwls7およびwls10は、両方とも親POMの「activeByDefault」です。しかし、顧客のニーズに応じて、wls10またはその両方だけがスクリプト( "-P"パラメータ付き)で構築されます –

答えて

1

あなたは(Mavenの2.0.10以降)wls7プロファイルを無効にしてみました:

のMaven 2.0.10以降では、1つのまたは 複数のプロファイルは、彼らの を付けることによって コマンドラインを使用して無効にすることができます識別子は文字「 」のいずれかです。または「 - 」以下に示すように:

mvn groupId:artifactId:goal -P !profile-1,!profile-2 

これはactiveByDefaultとしてマーク プロファイルまたはその他 それらの活性化 設定を介して活性化されるだろう プロファイルを無効にするために使用することができます。

そして、あなたの設定を別の名前のプロファイルに追加するか、pom.xmlに直接追加してください。

+0

私が上で述べたように、私は親会社のPOMを取り除くことができません。フレームワークの異なるレベル。 プロファイルの複製は、親POMの変更を報告する必要があり、ほとんどの場合、私はそれらを認識していないため、良い考えではありません。 私はちょうど私のプロジェクトでテストクラスのコンパイルの動作をオーバーライドしたいと思います。 –

+0

私の答えを読んで、それは私が提案したものではありません。親のPOMを取り除くのではなく、プロファイルを無効にすることを提案しました。それでは、なぜ親のポームに変更を報告しなければならないのですか?何もそれを強制するものではありません。 –

+0

はいパスカル、助けてくれてありがとうございますが、問題は、wls7プロファイルを無効にすると、他のプラグイン、Mavenの一般的なものなど、多くの設定を取り除くことができます。 変更を報告することで、私は親POMから私のPOMを意味しました。 あなたが提案したソリューションでは、親クラスのPOM(テストクラスのコンパイルのセクションを除く)をすべて複製する必要があります。親のPOM責任者が自分のPOMで何かを変更する場合は、変更を警告する必要がありますこれは現在のプロセスではなく、あまり実用的ではありません。 –

105

pomの要素にcombine.self="override"属性を追加すると、親のpomの設定を上書きすることができます。参照、オーバーライドプラグインの詳細については

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <executions> 
     <execution> 
      <id>my-testCompile</id> 
      <phase>test-compile</phase> 
      <goals> 
      <goal>testCompile</goal> 
      </goals> 
      <configuration combine.self="override"> 
      <fork>true</fork> 
      <executable>${jdk15.executable}</executable> 
      <compilerVersion>1.5</compilerVersion> 
      <source>1.5</source> 
      <target>1.5</target> 
      <verbose>true</verbose> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 

はにあなたのプラグインの設定を変更してみてくださいhttp://maven.apache.org/pom.html

+0

Maven2.2.1の場合、プロファイルでこれを行うと、親プロファイルで定義されたプラグインとマージせずに上書きしているようです。同じプラグインをビルドセクションに直接定義すると、それは機能します。 Maven3では期待通りに解決しました。 –

2

私は同じ問題がありました。デフォルトでは、私のMavenのWARプラグインはhtmlファイルを除外しました。しかし、私の受け入れテストのプロフィールでは、このファイルが必要でした。だから、私がmaven warプラグインにもう一度追加したとき、それはデフォルトを上書きしませんでした。

この問題を解決するために、私はcombine.self属性を渡して正常に動作しました。

デフォルトのビルド:

<plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.4</version> 
       <configuration> 
       <packagingExcludes>swagger-ui/client.html</packagingExcludes> 
       </configuration> 
      </plugin> 

受け入れテストプロファイル:wls7プロファイルがアクティブになる方法

<plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-war-plugin</artifactId> 
         <version>2.4</version> 
         <configuration combine.self="override"/> 
        </plugin> 
関連する問題