...
This tutorial demonstrates how to use the Cargo Maven 2 / Cargo Maven 3 plugin to automatically start/stop a container (possibly deploying some deployables to it as it starts).
Info |
---|
title | Like to learn by example? Take a look at our archetypes |
---|
|
We have several Maven 2 / Maven 3 Archetypes that contain sample Maven 2 / sample Maven 3 projects with different use cases for the Codehaus Cargo Maven 2 / Maven 3 plugin, we would really recommend that you check them out. For more details, read here: Maven 3 Archetypes. |
...
Code Block |
---|
|
[...]
<build>
<plugins>
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2maven3-plugin</artifactId>
</plugin>
</plugins>
</build>
[...]
|
...
This minimal configuration allows you to configure a default Tomcat 5.x standalone configuration (when the configuration type is not defined as above, the plugin will use a standalone configuration by default) in ${project.basedir}/target/resin
.
Example of a full-fledged Maven 2 / fledged Maven 3 configuration:
Code Block |
---|
|
[...]
<configuration>
<!-- Container configuration -->
<container>
<containerId>tomcat7x</containerId>
<zipUrlInstaller>
<url>https://repo.maven.org/maven2/org/apache/tomcat/tomcat/7.0.68/tomcat-7.0.68.zip</url>
</zipUrlInstaller>
<!--
Instead of downloading the container, you can also reuse an
existing installation by settings its directory:
<home>C:/Program Files/Apache/Apache Tomcat 7.0.68</home>
-->
<output>${project.build.directory}/tomcat7x/container.log</output>
<append>false</append>
<log>${project.build.directory}/tomcat7x/cargo.log</log>
</container>
<!-- Configuration to use with the container or the deployer -->
<configuration>
<type>standalone</type>
<home>${project.build.directory}/tomcat7x</home>
<properties>
<cargo.servlet.port>8080</cargo.servlet.port>
<cargo.logging>high</cargo.logging>
</properties>
</configuration>
<deployables>
<deployable>
<groupId>war group id</groupId>
<artifactId>war artifact id</artifactId>
<type>war</type>
<properties>
<context>optional root context</context>
</properties>
</deployable>
<deployable>
<groupId>ear group id</groupId>
<artifactId>ear artifact id</artifactId>
<type>ear</type>
</deployable>
[...]
</deployables>
</configuration>
[...]
|
...
Tip |
---|
|
The CARGO container definiton as well as the various application ping options in CARGO have a timeout option (which is extremely useful in real-life applications), the default timeout being set to 2 minutes in most cases. Please check the Maven 2 / Maven 3 Plugin Reference Guide as well as the documentation about Container Timeout for details. |
...
Code Block |
---|
|
[...]
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2maven3-plugin</artifactId>
<configuration>
<container>
<containerId>jetty6x</containerId>
<type>embedded</type>
</container>
</configuration>
</plugin>
[...]
|
...
Code Block |
---|
|
[...]
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2maven3-plugin</artifactId>
<configuration>
[...]
<properties>
<cargo.java.home>/usr/package/j2dsk1.4.2_11</cargo.java.home>
</properties>
[...]
</configuration>
</plugin>
[...]
|
...
Code Block |
---|
|
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2maven3-plugin</artifactId>
<configuration>
[...]
<deployables>
<deployable>
<location>${project.build.directory}/${project.build.finalName}.${project.packaging}</location>
<pingURL>http://localhost:port/mycontext/index.html</pingURL>
</deployable>
</deployables>
[...]
|
...
Code Block |
---|
|
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2maven3-plugin</artifactId>
<executions>
<execution>
<id>start-container</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>stop-container</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
<configuration>
[Cargo plugin configuration goes in here]
</configuration>
</plugin>
|
...
Code Block |
---|
|
[...]
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
[...]
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2maven3-plugin</artifactId>
<configuration>
<container>
[...]
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</dependency>
</dependencies>
</container>
[...]
</configuration>
</plugin>
|
...
Code Block |
---|
|
[...]
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2maven3-plugin</artifactId>
<configuration>
[...]
<properties>
<cargo.datasource.datasource.derby>
cargo.datasource.driver=org.apache.derby.jdbc.EmbeddedDriver|
cargo.datasource.url=jdbc:derby:derbyDB;create=true|
cargo.datasource.jndi=jdbc/CargoDS|
cargo.datasource.username=APP|
cargo.datasource.password=nonemptypassword
</cargo.datasource.datasource.derby>
</properties>
[...]
<container>
[...]
<dependencies>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
</dependency>
</dependencies>
</container>
</configuration>
</plugin>
|
...
Code Block |
---|
|
[...]
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2maven3-plugin</artifactId>
<configuration>
[...]
<properties>
<cargo.datasource.datasource.derby>
cargo.datasource.driver=org.apache.derby.jdbc.EmbeddedDriver|
cargo.datasource.url=jdbc:derby:derbyDB;create=true|
cargo.datasource.jndi=jdbc/CargoDS|
cargo.datasource.username=foo|
cargo.datasource.password=foopassword
</cargo.datasource.datasource.derby>
<cargo.datasource.datasource.derby2>
cargo.datasource.driver=org.apache.derby.jdbc.EmbeddedDriver|
cargo.datasource.url=jdbc:derby:derbyDB2;create=true|
cargo.datasource.jndi=jdbc/CargoDS2|
cargo.datasource.username=bar|
cargo.datasource.password=barpassword
</cargo.datasource.datasource.derby2>
</properties>
[...]
</configuration>
</plugin>
|
...
...
...
Code Block |
---|
|
[...]
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2maven3-plugin</artifactId>
<configuration>
[...]
<properties>
<cargo.resource.resource.mail>
cargo.resource.name=mail/Session|
cargo.resource.type=javax.mail.Session|
cargo.resource.parameters=mail.smtp.host=localhost;mail.smtp.connectiontimeout=10000
</cargo.resource.resource.mail>
</properties>
[...]
<container>
[...]
<dependencies>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</dependency>
</dependencies>
</container>
</configuration>
</plugin>
...
<dependencies>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4</version>
</dependency>
</dependencies>
|
...
Code Block |
---|
|
[...]
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2maven3-plugin</artifactId>
<configuration>
[...]
<properties>
<cargo.resource.resource.nativederby>
cargo.resource.name=resource/nativeCPDataSource|
cargo.resource.type=javax.sql.ConnectionPoolDataSource|
cargo.resource.class=org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource|
cargo.resource.parameters=createDatabase=create;databaseName=derbyDB;user=APP;password=nonemptypassword
</cargo.resource.resource.nativederby>
</properties>
[...]
<container>
[...]
<dependencies>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
</dependency>
</dependencies>
</container>
</configuration>
</plugin>
|
...
Code Block |
---|
|
[...]
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2maven3-plugin</artifactId>
<configuration>
[...]
<properties>
<cargo.resource.resource.apple>
cargo.resource.name=resource/apple|
cargo.resource.type=my.app.Fruit|
cargo.resource.class=my.app.AppleImpl|
cargo.resource.parameters=color=red;texture=crunchy
</cargo.resource.resource.apple>
<cargo.resource.resource.orange>
cargo.resource.name=resource/orange|
cargo.resource.type=my.app.Fruit|
cargo.resource.class=my.app.OrangeImpl|
cargo.resource.parameters=color=orange;texture=rindy
</cargo.resource.resource.orange>
</properties>
[...]
</configuration>
</plugin>
|
...