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

后端 未结 6 1953
臣服心动
臣服心动 2021-01-30 09:59

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 co

相关标签:
6条回答
  • 2021-01-30 10:41

    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.

    0 讨论(0)
  • 2021-01-30 10:44

    I find the solution: I put <configuration> in <execution>

    you can use mvn clean test -Pfoo,bar

    <profiles>
        <profile>
            <id>foo</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>exec-maven-plugin</artifactId>
                        <version>1.3.2</version>
                        <executions>
                            <execution>
                                <id>CountContinusIntegr-execution</id>
                                <phase>compile</phase>
                                <goals>
                                    <goal>java</goal>
                                </goals>
                                <configuration>
                                    <mainClass>com.mycompany.FooServer</mainClass>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>bar</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>exec-maven-plugin</artifactId>
                        <version>1.3.2</version>
                        <executions>
                            <execution>
                                <id>CountContinusIntegr-execution</id>
                                <phase>compile</phase>
                                <goals>
                                    <goal>java</goal>
                                </goals>
                                <configuration>
                                    <mainClass>com.mycompany.BarServer</mainClass>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
    
    0 讨论(0)
  • 2021-01-30 10:48

    @tieTYT: You can select the execution by id using two distinct profiles:

    mvn test -Pmanager

    mvn test -Pproxy

    <profiles> 
    <profile>
        <id>proxy</id>
        <build>
        <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <executions>
                <execution>
                    <phase>test</phase>
                    <goals>
                        <goal>java</goal>
                    </goals>
                    <configuration>
                        <mainClass>pt.inesc.proxy.Proxy</mainClass>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        </plugins>
        </build>
    </profile> 
    <profile>
        <id>manager</id>
        <build>
        <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <executions>
                <execution>
                    <phase>test</phase>
                    <goals>
                        <goal>java</goal>
                    </goals>
                    <configuration>
                        <mainClass>pt.inesc.manager.Manager</mainClass>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        </plugins>
        </build>
    </profile> 
    </profiles>
    
    0 讨论(0)
  • 2021-01-30 10:49

    With maven > 3.3.1 it is possible to specify the execution id as:

    mvn exec:java@execId
    
    0 讨论(0)
  • 2021-01-30 10:56

    I'm afraid that what you want is not possible. I could not find a way to call the same exec-maven-plugin goal directly (mvn exec:java) with different configurations in .pom file.

    Said that, you can however have multiple executions of exec-maven-plugin. The thing is you can not call the goals directly. You have to use multiple executions and bind them to particular build phases.

    You could also make use of the following solution that fitted me. You can still call one goal directly with it's configuration in the .pom:

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.3.2</version>
        <executions>
            <execution>
                <id>Acceptance Tests</id>
                <phase>integration-test</phase>
                <goals>
                    <goal>exec</goal>
                </goals>
                <configuration>
                    <executable>pybot</executable>
                    <arguments>
                        <!--...-->
                    </arguments>
                </configuration>
            </execution>
        </executions>
        <configuration>
            <mainClass>pt.jandias.someapp.persistence.SchemaGenerator</mainClass>
            <arguments>
                <!--...-->
            </arguments>
        </configuration>
    </plugin>
    

    One could than use mvn exec:java and mvn integration-test at will.

    0 讨论(0)
  • 2021-01-30 10:58

    For me including configuration in the execution block didn't work and maven complained about main class not being set. But inspired by Dario's answer I'd answer this question as follows:

    <profiles>
        <profile>
            <id>foo</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>exec-maven-plugin</artifactId>
                        <version>1.3.2</version>
                        <configuration>
                            <mainClass>com.mycompany.FooServer</mainClass>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>bar</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>exec-maven-plugin</artifactId>
                        <version>1.3.2</version>
                        <configuration>
                            <mainClass>com.mycompany.BarServer</mainClass>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
    

    Which then allows you to run one or the other server using:

    mvn exec:java -Pfoo
    

    or

    mvn exec:java -Pbar
    

    Cheers,

    0 讨论(0)
提交回复
热议问题