Domanda

Sto cercando di dividere un progetto Maven WAR in due moduli, in modo che possa creare un file JAR separato con gli strumenti della riga di comando. Il risultato ha la seguente struttura:

  • pom.xml (pom confezionamento, ha due moduli)
  • project-jar/
    • pom.xml (imballaggi jar)
  • project-war/
    • pom.xml (confezionamento war, dipende project-jar)

Se corro comandi mvn dalla radice, tutto funziona bene. Mi piacerebbe continuare a utilizzare mvn jetty:run, ma per questo ho bisogno di eseguire il comando nel sottoprogetto WAR. Se lo faccio, non riesce a trovare il sottoprogetto project-jar, quindi non verrà eseguito. mvn jetty:run-war Anche con un file WAR completamente assemblato nella directory target fallisce, perchè primi tentativi di "costruire" il progetto. Sono solo riuscito a farlo funzionare con l'installazione project-jar nel repository Maven locale, che non è molto bello.

C'è un modo per utilizzare il plugin molo in una configurazione Maven multi-modulo?

È stato utile?

Soluzione

Non c'è una soluzione magica e l'unico che conosco è un po 'hacky e si basano sull'elemento extraClasspath che è possibile utilizzare per dichiarare le directory di classe in più, relativamente. Ti piace questa (da MOLO-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>

Altri suggerimenti

Creare un profilo all'interno del modulo di guerra (project-war). Nell'ambito di tale profilo, configurare pontile per collegare ad una fase del ciclo di vita ed eseguire l'obiettivo run esplicitamente. Ora, quando Maven corre dal progetto toplevel con tale profilo attivato, invocheranno molo:. Correre e risoluzione delle dipendenze dei moduli sorella (come è normale quando si eseguono comandi Maven dal progetto toplevel)

La configurazione esempio, quando inserito nella pom.xml del modulo web (project-war), dispone circa molo: Esegui per eseguire durante la fase test. (È possibile scegliere un'altra fase, ma assicurarsi che sia dopo compile.)

Esegui dal livello superiore: mvn test -Pjetty-run o mvn test -DskipTests=true -Pjetty-run. Questo compilerà le dipendenze come richiesto e renderli disponibili ma Invoke molo:. Gestito all'interno del modulo corretto

<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>

Utilizzando extraClasspath in opere di configurazione molo ... ma per qualche ragione, se vasetti dipendenti (da altri moduli) sono superate alcune cose non funzioneranno correttamente.

Aggiungi plug pontile al POM radice e configurare un contextHandler indicando la guerra desiderata. Questo funziona per me in un progetto con più moduli vaso e due guerre di sovrapposizione.

<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

Lo so che stai chiedendo plugin di configurazione, ma si può solo definire il progetto nel comando Maven:

$ mvn jetty:run --projects project-war
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top