2012-08-14 10 views
18

Ho utilizzato con successo mvn tomcat7-maven-plugin:run -am -pl :foo per eseguire un solo progetto alla volta in Tomcat like is shown here. Ora mi piacerebbe avere più moduli in esecuzione sotto la stessa porta ma in contesti diversi. Per esempio, mi piacerebbe avere:Come utilizzare il plugin maven tomcat7: eseguito con più contesti (WAR)?

/ => foo.war 
/bar => bar.war 

Ecco un esempio pom.xml snippet che ho lavorato con:

<project><!-- ... --> 
    <build><!-- ... --> 
     <pluginManagement> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.tomcat.maven</groupId> 
        <artifactId>tomcat7-maven-plugin</artifactId> 
        <version>2.0-SNAPSHOT</version> 
        <configuration> 
         <path>/</path> 
         <port>8080</port> 
         <addContextWarDependencies>true</addContextWarDependencies> 
         <addWarDependenciesInClassloader>true</addWarDependenciesInClassloader> 
         <warSourceDirectory>${project.build.directory}/${project.build.finalName}/</warSourceDirectory> 
        </configuration> 
        <dependencies> 
         <dependency> 
          <groupId>${project.groupId}</groupId> 
          <artifactId>bar</artifactId> 
          <version>${project.version}</version> 
          <type>war</type> 
          <scope>tomcat</scope> 
         </dependency> 
        </dependencies> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
    </build> 
    <pluginRepositories> 
     <pluginRepository> 
      <id>apache.snapshots</id> 
      <name>Apache Snapshots</name> 
      <url>http://repository.apache.org/content/groups/snapshots-group/</url> 
      <releases> 
       <enabled>false</enabled> 
      </releases> 
      <snapshots> 
       <enabled>true</enabled> 
      </snapshots> 
     </pluginRepository> 
    </pluginRepositories> 
</project> 

Questo è possibile con il plugin tomcat7-maven-plugin:run? Sto facendo fatica a trovare la sintassi corretta per farlo suonare bene. Quando eseguo il comando maven per eseguirlo, viene eseguito solo il primo che trova nella gerarchia del progetto. E se li eseguo con lo <fork>true</fork> o, ovviamente, da terminali diversi, ottengo "java.net.BindException: Address in uso: 8080".

risposta

1

Usa qualcosa come

<configuration> 
    <webapps> 
     <webapp> 
     <groupId>com.company</groupId> 
     <artifactId>mywebapp</artifactId> 
     <version>1.0</version> 
     <type>war</type>  
     </webapp> 
    </webapps> 
    </configuration> 
+0

Suppongo che sia un blocco di configurazione per definire il contesto che viene eseguito all'interno del modulo corrente come root? cioè, sarebbe come aggiungere il mio "bar.war" come "/ bar" nel pom.xml del mio "foo.war" come "/"? Non ha funzionato direttamente a causa delle dipendenze, ma ci sto ancora giocando. – mckamey

+0

Non riesco a capire come gestire le dipendenze di "bar.war". Ho provato ad aggiungerli esplicitamente in questo modo http://stackoverflow.com/a/9928987/43217 ma senza fortuna. – mckamey

+0

Inoltre, se provo ad aggiungere "bar.war" come dipendenza dall'ambito "tomcat" al modulo stesso, allora esso crea prima e il comando tomcat7: run prova invece ad eseguirlo. – mckamey

19

Come già suggerito, utilizzare <webapps> sezione della configurazione del plugin, ma aggiungere ulteriori parametri <asWebapp>true</asWebapp> per ogni webapp, vale a dire:

<webapps> 
    <webapp> 
    <groupId>com.company</groupId> 
    <artifactId>mywebapp</artifactId> 
    <version>1.0</version> 
    <type>war</type>  
    <asWebapp>true</asWebapp> 
    </webapp> 
    <webapp> 
    <groupId>com.company</groupId> 
    <artifactId>mywebapp2</artifactId> 
    <version>2.0</version> 
    <type>war</type>  
    <asWebapp>true</asWebapp> 
    </webapp> 
</webapps> 

Questi webapps aggiuntivi sono dispiegati con il percorso di contesto ${artifactId} per impostazione predefinita.

Sembra che senza questo parametro webapps aggiuntivi vengono scartati automaticamente quando si esegue qualcosa come mvn tomcat7:run (provato su versione stabile 2.0). Related Jira issue dice che è stato fatto per "retrocompatibilità".

+0

Hey - solo una nota su questo che potrebbe aiutare qualcun altro ... Questo consiglio di Vasyl ha risolto il mio problema, ma ho dovuto aggiornare tomcat7-maven-plugin a 2.0 da 2.0-beta-1 prima che funzionasse. C'era un bug in quella versione precedente alla 2.0 che impediva il funzionamento delle webapps: https://issues.apache.org/jira/browse/MTOMCAT-169 –

+0

C'è un modo per sovrascrivere il percorso di contesto per la webapp con questo approccio ? – hoshposh

+4

@hoshposh Vedo il parametro 'contextPath' nella classe del plugin' org.apache.tomcat.maven.common.config.AbstractWebapp', quindi aggiungere qualcosa come ' ... /mypath ...' dovrebbe lavoro. –

Problemi correlati