如何在Maven中绑定两个插件

时间:2015-12-22 15:04:04

标签: maven tomcat deployment maven-cargo exec-maven-plugin

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

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

我看到两个选项:

  • 使“官方”maven 部署目标只需执行 cargo-plugin ,然后 exec-maven 而不执行任何其他操作< / p>

  • exec-maven 的执行绑定到货物的完成:部署

首先是我的喜好。不幸的是,我不知道如何实现其中任何一个。

当前的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>

1 个答案:

答案 0 :(得分:1)

我建议将cargo-maven2-plugin绑定到pre-integration-test阶段,将exec-maven-plugin绑定到integration-test阶段之后的package阶段。另请参阅有关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 ......

最好的方法是将这些集成测试场景分成单独的模块,或者如果只有一个模块,则使用配置文件进行活动集成测试。