ROMANIA_engineer
ROMANIA_engineer

Reputation: 56616

Serial execution of plugins in Maven using <phase>

I have the following structure in pom.xml:

<profile>
    <id> x </id>
    <build>
        <finalName> y </finalName>
        <plugins>
            <plugin>
                <artifactId>maven-clean-plugin</artifactId>
                <!-- DELETE SOME FOLDERS AND SOME FILES -->
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <!-- MOVE A FILE -->
            </plugin>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <version> 1.6 </version>
                <executions>
                    <execution>
                        <phase> <!-- WHAT COMES HERE ? --> </phase>
                        <configuration> 
                            <!-- I EXECUTE CMD FILE HERE -->
                        </configuration>
                        <goals>
                            <goal> run </goal>
                        </goals>
                    <execution>
                <executions>
            </plugin>
        </plugins>
    </build>
</profile>    

I want to achieve a serial execution for plugins:

  1. Delete some folders and some files (1st plugin)
  2. Move a file (2nd plugin)
  3. Run cmd file (3rd plugin)

What should I use for <phase> to have the order above (sequential execution)? Is it relevant ? Is it ok to use pre-integration-test for example ?

P.S.: Here are the phases: http://maven.apache.org/ref/3.2.2/maven-core/lifecycles.html

Upvotes: 0

Views: 289

Answers (2)

khmarbaise
khmarbaise

Reputation: 97349

If you like to add the execution of different plugins to the same life cycle phase the execution order is defined by the order of the definition in the pom file.

So if you choose to bind all the above three plugins to the package phase than they will be executed in the given order.

You can of course use the antrun plugin which will work also and will implicit execute the steps in the defined order without thinking about the default behaviour of Maven.

You can also use the exec-maven-plugin to execute a script in a particular life cycle phase but which might be not a good solution cause the script is OS dependent. Or you can use the groovy plugin to execute some steps in groovy code.

Upvotes: 1

Aaron Digulla
Aaron Digulla

Reputation: 328536

Maven doesn't support adding steps to the life cycle (without writing a new plugin).

If you have complex build steps and you absolutely need a certain order and this order violates the standard life cycle, then Maven might not be the right tool for you. Consider Gradle instead.

If you have to use Maven, then stop using plugins for this. Instead, replicate all the build steps using the antrun plugin so everything is done with a single Ant script. Afterwards, find a place in the life cycle where you want all the steps to be executed at once.

generate-sources is a good place if you need something to be done before anything is compiled. If you want to run code after compilation and tests, use prepare-package.

See here for the complete life cycle: http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference

Upvotes: 1

Related Questions