maven-2 - type - pom.xml example




Projet Maven multi-module et jetée: exécution (4)

J'essaie de scinder un projet Maven WAR en deux modules afin de pouvoir créer un fichier JAR distinct avec des outils de ligne de commande. Le résultat a la structure suivante:

  • pom.xml (emballage pom , a deux modules)
  • project-jar/
    • pom.xml ( jar emballage)
  • project-war/
    • pom.xml ( war emballages, dépend du project-jar )

Si je mvn commandes mvn depuis la racine, tout se passe bien. J'aimerais continuer à utiliser mvn jetty:run , mais pour cela, je dois exécuter la commande dans le sous-projet WAR. Si je le fais, le sous project-jar ne parvient pas à être exécuté. Même mvn jetty:run-war avec un fichier WAR complètement assemblé dans le répertoire target échoue, car il tente d'abord de "construire" le projet. Je n'ai réussi à le faire fonctionner qu'en installant project-jar dans le référentiel Maven local, ce qui n'est pas très agréable.

Est-il possible d'utiliser le plugin Jetty dans une configuration Maven à plusieurs modules?


Ajoutez un plugin jetty au pom racine et configurez un gestionnaire contextuel pointant vers la guerre souhaitée. Cela fonctionne pour moi dans un projet avec plusieurs modules de jar et deux guerres de superposition.

<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.3.0.M2</version>
<configuration>
        <scanIntervalSeconds>10</scanIntervalSeconds>
        <contextHandlers>
            <contextHandler
                implementation="org.eclipse.jetty.maven.plugin.JettyWebAppContext">
                <war>${project.basedir}/project-war/target/project-war-${project.version}.war</war>
                <contextPath>/</contextPath>
            </contextHandler>
        </contextHandlers>
    </configuration>
</plugin>

http://eclipse.org/jetty/documentation/current/jetty-maven-plugin.html#running-more-than-one-webapp


Créez un profil dans le module war ( project-war ). Dans ce profil, configurez la jetée pour qu'elle s'attache à une phase du cycle de vie et exécutez l'objectif d' run explicitement. Désormais, lorsque maven s'exécutera à partir du projet de niveau supérieur avec ce profil activé, il appellera jetty: run et aura une résolution de dépendance du module frère (comme il est normal lors de l'exécution de commandes maven à partir du projet de niveau supérieur).

L'exemple de configuration, lorsqu'il est placé dans le fichier pom.xml du module Web ( project-war ), organise l'exécution de jetty: run pendant la phase de test . (Vous pouvez choisir une autre phase, mais assurez-vous que c'est après la compile .)

Exécuter à partir de toplevel: mvn test -Pjetty-run ou mvn test -DskipTests=true -Pjetty-run . Cela compilera les dépendances selon vos besoins et les rendra disponibles, mais invoquera jetty: run dans le bon module.

<profiles>
  ...
  <!-- With this profile, jetty will run during the "test" phase -->
  <profile>
    <id>jetty-run</id>
    <build>
      <plugins>
        <plugin>
          <groupId>org.mortbay.jetty</groupId>
          <artifactId>jetty-maven-plugin</artifactId>
          <version>7.1.6.v20100715</version>
          <configuration>
            ...
            <webAppSourceDirectory>
              ${project.build.directory}/${project.build.finalName}
            </webAppSourceDirectory>
            ...
          </configuration>
          <executions>
            <execution>
              <id>jetty-run</id>
              <phase>test</phase>
              <goals>
                <goal>run</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
  </profile>
...
</profiles>

Je sais que vous demandez la configuration du plug-in, mais vous pouvez simplement définir le projet dans la commande maven:

$ mvn jetty:run --projects project-war

Utiliser extraClasspath dans la configuration de la jetée fonctionne ... mais pour une raison quelconque, si les fichiers JAR dépendants (des autres modules) sont obsolètes, certaines choses ne fonctionneront pas correctement.





maven-jetty-plugin