Search code examples
maven

Is it possible to execute two different maven exec-maven-plugin in a single POM


I execute the following code using mvn exec:java com.mycompany.FooServer.

I would like to add another server which I can execute like mvn exec:java com.mycompany.BarServer.

How do I do that within a single pom file?

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>java</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>com.mycompany.FooServer</mainClass>
            </configuration>
        </plugin>
 </build>  

Solution

  • Try this. You can have more than one execution under executions. All you need to do is move the configuration element under the execution. The plugin has configuration, but each execution can also have a separate configuration element.

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <executions>
                    <execution>
                        <id>first-execution</id>
                        <goals>
                            <goal>java</goal>
                        </goals>
                        <configuration>
                            <mainClass>com.mycompany.FooServer</mainClass>
                        </configuration>
                    </execution>
                    <execution>
                        <id>second-execution</id>
                        <goals>
                            <goal>java</goal>
                        </goals>
                        <configuration>
                            <mainClass>com.mycompany.BarServer</mainClass>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
         </plugins>
     </build>
    

    With Maven 3.3.1 and up, you can run an execution by its ID using

    mvn exec:java@id
    

    In this case the commands would be mvn exec:java@first-execution and mvn exec:java@second-execution. See this answer for more details.