119

私のプロジェクトのPOM親ファイルには、このプロジェクトに役立ついくつかの構成を定義するようなプロファイルがあります(この親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-compiler-plugin の構成をオーバーライドしたいと考えています。

そのため、プロジェクトの 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の責任者が何かを変更した場合、私
    はそれを報告する必要があるためです。

これは単なる継承の問題 (プロファイルの拡張またはオーバーライド、上位レベルの POM からの構成) であるため、Maven 2 で可能になるはずです。

4

3 に答える 3

152

combine.self="override"親pomからの構成のオーバーライドは、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を参照してください。

于 2011-11-14T09:47:40.620 に答える
6

私は同じ問題を抱えていました。デフォルトでは、私の 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>

受け入れテスト プロファイル:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration combine.self="override"/>
</plugin>
于 2013-09-17T06:03:59.353 に答える
1

wls7 プロファイルを非アクティブ化しようとしましたか (maven 2.0.10 以降):

Maven 2.0.10 以降では、コマンド ラインを使用して識別子の前に文字「!」を付けることにより、1 つ以上のプロファイルを非アクティブ化できます。または '-' 以下に示すように:

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

これを使用して、activeByDefault としてマークされたプロファイル、またはアクティブ化構成を通じてアクティブ化されるプロファイルを非アクティブ化できます。

次に、別の名前のプロファイルに構成を追加するか、直接pom.xml.

于 2009-11-20T18:25:05.357 に答える