Maven – Lancer une application sur un tomcat de manière embarquée

L’objectif de cet article, c’est de lancer un serveur Tomcat embarqué au projet via Maven. Ainsi, en lançant une commande Maven, un serveur Tomcat one shot se lancera et déploiera le projet web courant. Il n’y aura pas besoin de télécharger le serveur et le configurer manuellement.

Si vous ne maitrisez pas Maven, je vous conseille de lire ce sujet sur les bases de Maven pour vous aider.

Le projet est téléchargeable sur ce repository.

Version simplifiée

<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>fr.jmottez</groupId>
	<artifactId>embedded-tomcat-not-web-xml</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>

    <properties>
        <java.version>1.8</java.version>
        <javax.servlet.version>3.0.1</javax.servlet.version>
    </properties>

	<dependencies>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${javax.servlet.version}</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>

	<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>


            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>9090</port>
                    <path>/my-app</path>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
pom.xml

 

Voici la première version de notre configuration Maven. La partie la plus interessante est la définition des différents plugins Maven mis en place. Je vais les citer un par un.

Plugin maven-compiler-plugin

Ce plugin permet juste de configurer la version Java utilisée. J’ai développé le projet en Java 8.

Plugin maven-war-plugin

Ce plugin fait parti des plugins par défaut. Comme le projet a un packaging de type “war”, ce plugin est utilisé dans le cycle de vie “package”. Il construit l’archive “war” dans le dossier “target”.

On précise dans le plugin que le projet ne possède pas de fichier web.xml, puisque la configuration du déploiement se construit à la volée par un autre plugin.

Plugin  tomcat7-maven-plugin

Voici le plugin qui nous intéresse le plus. Il permet de déployer une archive war sur un serveur Tomcat local ou embarqué.

Le nom de ce plugin est trompeur. On peut utiliser un serveur Tomcat 7 comme un serveur Tomcat 8 avec ce plugin.

On rajoute la partie “configuration” dans le plugin afin définir le déploiement de notre application. On choisit le port (ici “9090”) utilisé pour l’application, ainsi le chemin (ici “my-app”) où sera déployé l’application.

Déploiement

Afin de lancer le déploiement, on va lancer les commandes Maven “package tomcat7:run”. Cette méthode crée le packaging de l’application, puis d’exécute la commande run du plugin tomcat7. Le packaging construit un dossier war dans le dossier target de l’application, le plugin tomcat7 se base sur ce packaging pour déployer l’application.

Dès que les logs Maven annoncent que l’application est déployée (affichant ‘Starting ProtocolHandler [“http-bio-9090”]’) vous pouvez utiliser votre navigateur web et tester l’url http://localhost:9090/my-app/

Allez plus long: version de déploiement dans le cycle de vie Maven

<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>fr.jmottez</groupId>
	<artifactId>embedded-tomcat-not-web-xml</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>

    <properties>
        <java.version>1.8</java.version>
        <javax.servlet.version>3.0.1</javax.servlet.version>
    </properties>

	<dependencies>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${javax.servlet.version}</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>

	<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>9090</port>
                    <path>/my-app</path>
                </configuration>
                <executions>
                    <execution>
                        <phase>deploy</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
		
        </plugins>
    </build>

</project>

Exécution du plugin  tomcat7-maven-plugin

Cette fois ci, on va définir l’exécution du plugin tomcat7 lors du cycle “deploy” de Maven.  Il suffit de définir que l’on appelle la fonction “run” au moment du cycle “deploy”.

Le cycle de vie “deploy” se fait après celui de “package”, du coup, le packaging est déjà fait lors de son exécution.

Désactivation du plugin maven-deploy-plugin

Ce plugin s’exécute à la phase “deploy”. Il a besoin d’être configuré pour fonctionner. Je le désactive afin de ne pas être embêté.

Déploiement

Pour déployer à nouveau, il suffit (d’arrêter l’exécution Maven précédente si besoin et) lancer la commande Maven “deploy”. Je vous laisse retester l’application avec  l’url http://localhost:9090/my-app/ pour voir votre déploiement.

Leave a Reply

Your email address will not be published. Required fields are marked *