是否可以在单个POM中执行两个不同的maven exec-maven-plugin

时间:2011-11-24 04:07:26

标签: maven

我使用mvn exec:java com.mycompany.FooServer执行以下代码。

我想添加另一个我可以执行的服务器,如mvn exec:java com.mycompany.BarServer

如何在单个pom文件中执行此操作?

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

6 个答案:

答案 0 :(得分:79)

试试这个。您可以在执行下执行多个执行。您需要做的就是在执行时移动配置元素。该插件具有配置,但每次执行也可以有一个单独的配置元素。

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

使用Maven 3.3.1及更高版本,您可以使用

按ID运行
mvn exec:java@id

在这种情况下,命令将是mvn exec:java@first-executionmvn exec:java@second-execution。有关详细信息,请参阅this answer

答案 1 :(得分:10)

@tieTYT:您可以使用两个不同的配置文件选择id执行:

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>

答案 2 :(得分:8)

使用maven&gt; 3.3.1可以将执行ID指定为:

mvn exec:java@execId

答案 3 :(得分:2)

对于我来说,包括执行块中的配置没有工作,并且maven抱怨主要类没有被设置。但受到达里奥答案的启发,我回答这个问题如下:

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

然后允许您使用以下命令运行一个或另一个服务器:

mvn exec:java -Pfoo

mvn exec:java -Pbar

干杯,

答案 4 :(得分:1)

我找到了解决方案: I put <configuration> in <execution>

你可以使用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>

答案 5 :(得分:0)

我担心你想要什么是不可能的。我找不到用.pom文件中的不同配置直接调用相同的exec-maven-plugin目标(mvn exec:java)的方法。

说,但是你可以多次执行exec-maven-plugin 。事情是你无法直接调用目标。您必须使用多个执行并将它们绑定到特定的构建阶段。

您还可以使用以下适合我的解决方案。您仍然可以使用.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>

可以随意使用mvn exec:javamvn integration-test