By configuring the Maven POM, we can set a Web Archive (WAR) deployments to a given JEE Server (e.g. Tomcat, Liberty Core, etc).
Most projects involving more than one developer have some concept of a deployment path. A deployment artifact is likely deployed on a local web server (DEV), then deployed on an integration server (INT), and promoted to a test server (QA) if a smoke test passes.
We can configure each environment in the deployment path within our POM file.
Typically, the POM file for a Tomcat deployment would contain a section that looks something like this:
<plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <url>http://localhost:8080/manager/text</url> <server>TomcatServer</server> <path>/test</path> <username>craig</username> <password>password</password> </configuration> </plugin>
And the WAR artifact is deployed using this command:
$ mvn tomcat7:deploy
This works great until we need to manage multiple environments.
Rather than maintaining multiple <configuration> sections, and commenting out the current one that is not in use, we can do something like this:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.myproject</groupId> <artifactId>myproject</artifactId> <version>1.0.0</version> <packaging>war</packaging> <url /> <name>My Project</name> <inceptionYear>2015</inceptionYear> <description>A Description Here</description> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <inherited>true</inherited> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>2.4</version> <configuration> <warSourceDirectory>WebContent</warSourceDirectory> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <configuration> <webResources> <resource> <!-- this is relative to the pom.xml directory --> <directory>../preDeploy</directory> </resource> </webResources> </configuration> </plugin> <!-- Required for Maven-to-Tomcat Deployments --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <path>/mypath</path> <url>${deploy_url}</url> <server>${deploy_server}</server> <username>${deploy_username}</username> <password>${deploy_password}</password> </configuration> </plugin> </plugins> </build> <!-- Build with -P<profileName> to activate one of the profiles--> <profiles> <profile> <id>local</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <deploy_url>http://192.168.1.200:8080/manager/text</deploy_url> <deploy_server>TomcatServer</deploy_server> <deploy_username>craig</deploy_username> <deploy_password>tomcat</deploy_password> </properties> <build> <resources> <resource> <directory>src/main/resources/local</directory> </resource> </resources> </build> </profile> <profile> <id>int</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <deploy_url>http://192.168.1.200:8081/manager/text</deploy_url> <deploy_server>TomcatServer</deploy_server> <deploy_username>craig</deploy_username> <deploy_password>password</deploy_password> </properties> <build> <resources> <resource> <directory>src/main/resources/local</directory> </resource> </resources> </build> </profile> <profile> <id>qa</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <deploy_url>http://192.168.1.200:8082/manager/text</deploy_url> <deploy_server>TomcatServer</deploy_server> <deploy_username>craig</deploy_username> <deploy_password>tomcat</deploy_password> </properties> <build> <resources> <resource> <directory>src/main/resources/local</directory> </resource> </resources> </build> </profile> </profiles> <repositories> <repository> <id>maven2-repository.java.net</id> <name>Java.net Repository for Maven</name> <url>http://download.java.net/maven/2/</url> <layout>default</layout> </repository> </repositories> <dependencies> <!-- dependencies are listed here --> </dependencies> </project>
And the WAR artifact is deployed using this command:
$ mvn tomcat7:deploy -Pdev
The text highlighted in red above corresponds to the profile name that we have defined in the POM.