在运行单个插件时,让maven在另一个任务之前运行一个任务

时间:2015-07-16 13:47:53

标签: maven maven-3 maven-cargo

我已经使用Maven Cargo插件设置了一个项目来启动Tomcat,并在其中部署了我的webapp,以及支持所需的其他一些Web应用程序。这非常有效。不幸的是,当我运行“mvn cargo:run”时,它不首先进行构建,而是实际启动Tomcat运行代码,这是我上次进行构建时。

之前我使用的是tomcat7插件,而且它确实首先进行了构建,并始终运行当前版本的源代码。因此,我可以更改我的代码并运行“mvn tomcat7:run”,并且知道代码更改已经构建并且正在运行。

我找不到Cargo插件的任何方法来实现这一点,但是当我运行一个特定的插件时,它是否有一些方法让Maven至少运行Package阶段以便它将构建WAR文件先正确吗?

3 个答案:

答案 0 :(得分:1)

Tomcat插件在执行之前自动调用compile阶段。 Cargo插件不会这样做。为了在执行插件之前编译代码,您需要运行

mvn clean compile cargo:run

如果要在集成测试之前和之后自动启动和停止容器,还可以将cargo:startcargo:stop绑定到Maven的生命周期阶段。有关详细信息,请参阅Automatically executing and stopping the container when running mvn install

答案 1 :(得分:0)

以下是如何通过Cargo在常规版本中集成启动的完整示例。 https://github.com/khmarbaise/maui/tree/master/src/main/resources/it-example-container。您可以通过mvn -Prun-its clean verify开始集成测试,这可能会更好

答案 2 :(得分:0)

完全不同的方法是使用exec-maven-plugin通过一个命令执行多个目标:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.4.0</version>
            <configuration>
                <executable>mvn</executable>
                <arguments>
                    <argument>clean</argument>
                    <argument>compile</argument>
                    <argument>cargo:run</argument>
                </arguments>
            </configuration>
        </plugin>
        <!-- more plugins... -->
    </plugins>
</build>

这样,你只需要打电话

mvn exec:exec

清理,编译和运行您的应用程序。