it-swarm.com.de

Ist es möglich, die Konfiguration eines Plugins zu überschreiben, das bereits für ein Profil in einem übergeordneten POM definiert wurde?

In einer übergeordneten POM-Datei meines Projekts habe ich ein solches Profil, das einige für dieses Projekt nützliche Konfigurationen definiert (damit ich dieses übergeordnete POM nicht entfernen kann):

<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>

In meinem Projekt möchte ich nur die Konfiguration des Maven-Compiler-Plugins überschreiben, um jdk5 anstelle von jdk4 zum Kompilieren von Testklassen zu verwenden.

Deshalb habe ich diesen Abschnitt im POM meines Projekts erstellt:

<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>

und es funktioniert nicht ...

Ich habe sogar versucht, die Konfiguration in normalen Plugin-Abschnitten meines POM zu überschreiben (ich meine, nicht für ein bestimmtes Profil, sondern für meinen gesamten POM).

Woran könnte das liegen?

Um einige meiner Anforderungen zu klären:

  • Ich möchte das übergeordnete POM und das darin definierte Profil (wls7) nicht entfernen (da ich viele und viele Eigenschaften, Konfigurationen usw. benötige), und das ist nicht der Prozess in meinem Unternehmen.
  • Eine Lösung, die auf dem Duplizieren des übergeordneten POM und/oder des darin definierten Profils basiert, ist nicht geeignet. Da wenn der Verantwortliche von
    die Eltern POM etwas ändern, ich
    müsste es bei mir melden.

Es ist nur eine Vererbungssache (ein Profil erweitern oder überschreiben, eine Konfiguration aus einem übergeordneten POM), daher denke ich, dass dies mit Maven 2 möglich sein sollte.

98

Das Überschreiben von Konfigurationen aus einem übergeordneten POM kann durch Hinzufügen des Attributs combine.self="override" Zum Element in Ihrem POM erfolgen.

Versuchen Sie, Ihre Plugin-Konfiguration zu ändern:

    <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>

Weitere Informationen zum Überschreiben von Plugins finden Sie unter: http://maven.Apache.org/pom.html

130
Rolf

ich hatte das gleiche Problem. Standardmäßig hat mein Maven War Plugin eine HTML-Datei ausgeschlossen. Aber in meinem Akzeptanz-Test-Profil wollte ich diese Datei enthalten. Als ich das Maven War Plugin wieder hinzufügte, überschrieb es nicht die Standardeinstellung.

Um dieses Problem zu beheben, übergab ich das Attribut "combine.self" und funktionierte einwandfrei.

Standard Build:

<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>

Akzeptanztestprofil:

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration combine.self="override"/>
</plugin>
5
shane lee

Haben Sie versucht, das wls7-Profil zu deaktivieren (seit maven 2.0.10):

Ab Maven 2.0.10 können ein oder mehrere Profile über die Befehlszeile deaktiviert werden, indem dem Bezeichner entweder das Zeichen '!' Vorangestellt wird. oder '-' wie unten gezeigt:

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

Dies kann zum Deaktivieren von Profilen verwendet werden, die als activeByDefault markiert sind, oder von Profilen, die ansonsten über ihre Aktivierungskonfiguration aktiviert würden.

Und dann fügen Sie Ihre Konfiguration in einem Profil mit einem anderen Namen oder direkt in Ihrem pom.xml.

2
Pascal Thivent