Maven merging changes plugin execution order in same Phase

518 Views Asked by At

I'm working on a Project which uses the same Plugin Multiple Times in multiple Parent Pom Files. Normally, if you use two Plugins in the same maven phase, it will execute the plugin which is first defined in the POM. In my case Maven merges the Plugins which causes my Plugins to be executed in the wrong order.

I want my Plugins to be executed in the following Order:

first,second,third,fourth

But the order it executes them is:

first,second,fourth,third

These are my POM's:

ParentParentPom.xml

<plugins>
   <plugin>
      <groupId>com.google.code.maven-replacer-plugin</groupId>
      <artifactId>replacer</artifactId>
      <version>1.5.3</version>
      <configuration></configuration>
      <executions>
         <execution>
            <id>first-plugin-execution</id>
            <phase>prepare-package</phase>
            <goals>
               <goal>replace</goal>
            </goals>
         </execution>
      </executions>
   </plugin>
   <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <version>3.0.0</version>
      <executions>
         <execution>
            <id>second-plugin-execution</id>
            <phase>generate-sources</phase>
            <goals>
               <goal>java</goal>
            </goals>
         </execution>
      </executions>
   </plugin>
</plugins>

ParentPom.xml

<plugins>
   <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <version>3.0.0</version>
      <executions>
         <execution>
            <id>third-plugin-execution</id>
            <phase>compile</phase>
            <goals>
               <goal>java</goal>
            </goals>
         </execution>
      </executions>
   </plugin>
   <plugin>
      <groupId>com.google.code.maven-replacer-plugin</groupId>
      <artifactId>replacer</artifactId>
      <version>1.5.3</version>
      <configuration></configuration>
      <executions>
         <execution>
            <id>fourth-plugin-execution</id>
            <phase>compile</phase>
            <goals>
               <goal>replace
            </goal>
            </goals>
         </execution>
      </executions>
   </plugin>
</plugins>

Effective Pom.xml

I looked into the Effective Pom of my Project and saw that Maven merged the plugins like this:

<plugins>
   <plugin>
      <groupId>com.google.code.maven-replacer-plugin</groupId>
      <artifactId>replacer</artifactId>
      <version>1.5.3</version>
      <executions>
         <execution>
            <id>first-plugin-execution</id>
            <phase>prepare-package</phase>
            <goals>
               <goal>replace</goal>
            </goals>
         </execution>
         <execution>
            <id>fourth-plugin-execution</id>
            <phase>compile</phase>
            <goals>
               <goal>replace</goal>
            </goals>
         </execution>
      </executions>
   </plugin>
   <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <version>3.0.0</version>
      <executions>
         <execution>
            <id>second-plugin-execution</id>
            <phase>generate-sources</phase>
            <goals>
               <goal>java</goal>
            </goals>
         </execution>
         <execution>
            <id>third-plugin-execution</id>
            <phase>compile</phase>
            <goals>
               <goal>java</goal>
            </goals>
         </execution>
      </executions>
   </plugin>
</plugins>

Changing the Phases of the Plugins is not an option because these plugins rely on plugins which are executed in the compile phase and other plugins rely on the execution of the thrith and fourth execution too.

Is there any way I can prevent maven from merging these plugins together, so that they stay in the right order?

0

There are 0 best solutions below