36 votes

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

Je suis en train de séparer un Maven GUERRE de projet en deux modules, de sorte que je peux construire un distinct fichier JAR avec des outils de ligne de commande. Le résultat a la structure suivante:

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

Si j'exécute mvn des commandes à partir de la racine, tout fonctionne bien. J'aimerais continuer à l'utiliser mvn jetty:run, mais pour cela j'ai besoin pour exécuter la commande dans la GUERRE sous-projet. Si je fais ça, ne parvient pas à trouver l' project-jar sous-projet, afin de ne pas courir. Même mvn jetty:run-war avec un complètement assemblé fichier WAR dans l' target directory échoue, car il tente d'abord de "construire" le projet. Je n'ai réussi à le faire fonctionner 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 un multi-module de configuration de Maven?

29voto

Patrick Points 1451

Créer un profil à l'intérieur de la guerre du module (project-war). Dans ce profil, configurer l'embarcadère pour l'attacher à une phase du cycle de vie et d'exécuter l' run objectif explicitement. Maintenant, quand maven s'exécute à partir de la racine du projet avec le profil activé, il invoque jetty:run et ont sœur module de résolution de dépendances (comme il est normal lors de l'exécution de maven commandes à partir de la racine du projet).

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

Exécuter à partir du niveau supérieur: mvn test -Pjetty-run ou mvn test -DskipTests=true -Pjetty-run. Cela permettra de compiler les dépendances nécessaires et de les rendre disponibles mais invoquer 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>

11voto

Pascal Thivent Points 295221

Il n'y a pas de solution magique et la seule que je connaisse est un peu hacky et s'appuie sur l'élément extraClasspath que vous pouvez utiliser pour déclarer des répertoires de classes supplémentaires, relativement. Comme ça (de JETTY-662 ):

 <plugin>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>7.0.1.v20091125</version>
  <configuration>
    <scanIntervalSeconds>10</scanIntervalSeconds>
    <webAppConfig>
      <contextPath>/my-context</contextPath>
      <extraClasspath>target/classes;../my-jar-dependency/target/classes</extraClasspath>
    </webAppConfig>
    <scanTargets>
      <scanTarget>../my-jar-dependency/target/classes</scanTarget>
    </scanTargets>
  </configuration>
</plugin>
 

1voto

Jaime Hablutzel Points 1442

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X