Question

Je suis en train de diviser un projet Maven WAR en deux modules, afin que je puisse construire un fichier JAR séparé avec des outils de ligne de commande. Le résultat a la structure suivante:

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

Si je lance des commandes mvn de la racine, tout fonctionne bien. Je voudrais continuer à utiliser mvn jetty:run, mais pour que j'ai besoin d'exécuter la commande dans la guerre sous-projet. Si je fais cela, ne trouve pas le sous-projet de project-jar, il ne fonctionnera pas. Même mvn jetty:run-war avec un fichier WAR complètement assemblé dans le répertoire target échoue, car il essaie d'abord de « construire » le projet. Je n'ai réussi à le faire fonctionner en installant project-jar dans le dépôt local, ce qui est très agréable.

Y at-il un moyen d'utiliser le plug-in jetée dans une configuration Maven multi-module?

Était-ce utile?

La solution

Il n'y a pas de solution magique et le seul que je connais est un peu hacky et compter sur l'élément extraClasspath que vous pouvez utiliser pour déclarer les répertoires de classe supplémentaires, relativement. Comme cela (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>

Autres conseils

Créer un profil à l'intérieur du module de guerre (de project-war). Au sein de ce profil, jetée configure pour attacher à une phase du cycle de vie et d'exécuter l'objectif run explicitement. Maintenant, quand Maven va du projet de premier niveau avec ce profil activé, il appellera la jetée. Et avoir une résolution terme de dépendance du module soeur (comme il est normal lors de l'exécution des commandes Maven du projet toplevel)

L'exemple de configuration, lorsqu'il est placé dans le pom.xml du module de bande (project-war), prend des dispositions pour ponton: course à exécuter durant la phase de test. (Vous pouvez choisir une autre phase, mais assurez-vous qu'il est après compile.)

Exécuter à partir de premier niveau: mvn test -Pjetty-run ou mvn test -DskipTests=true -Pjetty-run. Cela va compiler les dépendances selon les besoins et les rendre disponibles, mais Invoke jetée. Courir 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>

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

Ajouter plugin jetée à la pom racine et configurer un contextHandler pointant vers la guerre souhaitée. Cela fonctionne pour moi dans un projet avec plusieurs modules de pot 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

Je sais que vous vous demandez plugin de configuration, mais vous pouvez définir simplement le projet dans la commande maven:

$ mvn jetty:run --projects project-war
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top