Das WAR Maven Plugin ist ein Maven Plugin, das mehr Freiheiten beim Erstellen von WAR-Files erlaubt. Hauptzweck ist das Verwenden von Embedded Tomcat beim Entwickeln von Projekten. Darüber hinaus ist das Plugin schneller, da es die abhängigen Artifacts nicht in ein temporäres WEB-INF/lib kopiert.

Konfiguration#

Das Einbinden erfolgt durch die pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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">
	<packaging>custom-war<packaging>
        ...
	<build>
		<extensions>
			<extension>
				<groupId>com.intersult</groupId>
				<artifactId>war-maven-plugin</artifactId>
				<version>1.0-SNAPSHOT</version>
			</extension>
        	</extensions>
            ...
        </build>
	<pluginRepositories>
		<pluginRepository>
			<id>intersult-repo</id>
			<name>Intersult Repository</name>
			<url>http://repository.intersult.com/repository</url>
		</pluginRepository>
	</pluginRepositories>
</project>

Embedded Tomcat#

Anbei dei Konfiguration, welche die benötigten Web-Root-Dateien in das WAR-Directory kopiert:
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-resources-plugin</artifactId>
	<version>2.5</version>
	<executions>
		<execution>
			<id>copy-jsp</id>
			<phase>compile</phase>
			<goals>
				<goal>copy-resources</goal>
			</goals>
			<configuration>
				<resources>
					<resource>
						<directory>src/main/webapp</directory>
						<filtering>true</filtering>
						<includes>
							<include>**/*.xml</include>
						</includes>
					</resource>
					<resource>
						<directory>src/main/webapp</directory>
						<excludes>
							<exclude>**/*.xml</exclude>
						</excludes>
					</resource>
				</resources>
				<outputDirectory>${project.build.directory}/${project.build.finalName}</outputDirectory>
			</configuration>
		</execution>
	</executions>
</plugin>

Das Projekt kann dann mit "mvn compile" gebaut werden und mit "mvn package" bzw. "mvn install" wird das WAR-Archiv direkt im target gebaut.

Hinweis: Das Resource-Plugin ist so konfiguriert, dass es beim Einbinden in Eclipse über das Maven-Eclipse-Plugin (M2E) die Web-Resources einzeln ersetzt. Damit ist ein Hot-Deploy von XHTML-Dateien möglich.

Tomcat-Konfiguration#

Der Tomcat kann dann direkt darin gestartet werden, ohne dass die Dateien in WEB-INF/lib stören würden:
<plugin>
	<groupId>org.apache.tomcat.maven</groupId>
	<artifactId>tomcat7-maven-plugin</artifactId>
	<version>2.0</version>
	<configuration>
		<warSourceDirectory>${project.build.directory}/${project.build.finalName}</warSourceDirectory>
	</configuration>
</plugin>

Tomcat kann mit "mvn tomcat7:run" bzw. "mvnDebug tomcat7:run" direkt gestartet werden und mit dem Debugger verbunden. Das Ganze geht auch mit älteren Tomcat-Versionen, entsprechend ist dann tomcat6-maven-plugin zu verwenden.