如何在 Maven 中绑定两个插件
How to bind two plugins in Maven
使用 Maven,我需要自动将 Web 应用程序部署到 Tomcat 服务器,然后 运行 MainClass 以便执行一些 post-部署操作。
仅这两件事就已经在工作了,分别通过 cargo-maven2-plugin exec-maven-plugin。但是我不知道如何将它们绑定在一起。
我看到两个选项:
使 "official" maven deploy 目标简单地执行 cargo-plugin,然后 exec-maven 没有别的
将exec-maven的执行绑定到cargo:deploy
[的完成=40=]
第一个是我最喜欢的。不幸的是,我不知道如何实现它们中的任何一个。
当前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...
最好的方法是将此类集成测试场景分离到一个单独的模块中,或者如果您只有一个模块,则使用配置文件来激活集成测试。
使用 Maven,我需要自动将 Web 应用程序部署到 Tomcat 服务器,然后 运行 MainClass 以便执行一些 post-部署操作。
仅这两件事就已经在工作了,分别通过 cargo-maven2-plugin exec-maven-plugin。但是我不知道如何将它们绑定在一起。
我看到两个选项:
使 "official" maven deploy 目标简单地执行 cargo-plugin,然后 exec-maven 没有别的
将exec-maven的执行绑定到cargo:deploy
[的完成=40=]
第一个是我最喜欢的。不幸的是,我不知道如何实现它们中的任何一个。
当前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...
最好的方法是将此类集成测试场景分离到一个单独的模块中,或者如果您只有一个模块,则使用配置文件来激活集成测试。