如何在 Maven 中绑定两个插件

How to bind two plugins in Maven

使用 Maven,我需要自动将 Web 应用程序部署到 Tomcat 服务器,然后 运行 MainClass 以便执行一些 post-部署操作。

仅这两件事就已经在工作了,分别通过 cargo-maven2-plugin exec-maven-plugin。但是我不知道如何将它们绑定在一起。

我看到两个选项:

第一个是我最喜欢的。不幸的是,我不知道如何实现它们中的任何一个。

当前pom.xml:

<plugin>
    <groupId>org.codehaus.cargo</groupId>
    <artifactId>cargo-maven2-plugin</artifactId>
    <version>1.4.15</version>
    <configuration>
        <container>
            <containerId>tomcat8x</containerId>
            <type>remote</type>
            <systemProperties>
                <cargo.jvmargs>-XX:MaxPermSize=256M -Xmx1024m</cargo.jvmargs>
            </systemProperties>
        </container>
        <configuration>
            <type>runtime</type>
            <properties>
                <cargo.hostname>${my.hostname}</cargo.hostname>
                <cargo.servlet.port>${my.port}</cargo.servlet.port>
                <cargo.tomcat.manager.url>${my.hostname}/manager</cargo.tomcat.manager.url>
                <cargo.remote.username>tomcat</cargo.remote.username>
                <cargo.remote.password>tomcat</cargo.remote.password>
            </properties>
        </configuration>
        <deployables>
            <deployable>
                <location>${project.build.directory}/${project.build.finalName}.war</location>
                <type>war</type>
                <properties>
                    <context>/${project.build.finalName}</context>
                </properties>
            </deployable>
        </deployables>
    </configuration>
</plugin>

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.4.0</version>
    <executions>
        <execution>
            <!-- NEED TO BE AFTER DEPLOY -->
            <phase>package</phase>
            <goals>
                <goal>java</goal>
            </goals>
            <configuration>
                <mainClass>ch.MainClass</mainClass>
                <arguments>
                    <argument>Will be forwarded to main()</argument>
                </arguments>
            </configuration>
        </execution>
    </executions>
</plugin>

我建议将 cargo-maven2-plugin 绑定到 pre-integration-test 阶段,将你的 exec-maven-plugin 绑定到 package 之后的 integration-test 阶段阶段。另请参阅有关 default life cycle phases.

的文档

deploy 阶段通常用于将生成的工件部署到 Maven 存储库,因此将 运行 集成测试绑定到此阶段没有实际意义。

<plugin>
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
    <executions>
        <execution>
            <phase>integration-test</phase>
            <goals>
                <goal>xxxx</goal>
            </goals>
            <configuration>
               ....
            </configuration>
        </execution>
    </executions>
</plugin>

以上配置可以应用于你的插件 exec-maven-plugin 以及 cargo-maven2-plugin...

最好的方法是将此类集成测试场景分离到一个单独的模块中,或者如果您只有一个模块,则使用配置文件来激活集成测试。