2012-08-14 15 views
18

He estado usando mvn tomcat7-maven-plugin:run -am -pl :foo con éxito para ejecutar un solo proyecto a la vez en Tomcat like is shown here. Ahora me gustaría tener varios módulos ejecutados bajo el mismo puerto pero en contextos diferentes. Por ejemplo, me gustaría tener:Cómo usar el complemento maven tomcat7: ¿se ejecuta con múltiples contextos (WAR)?

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

He aquí un ejemplo de fragmento pom.xml que he estado trabajando 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> 

es esto posible con el tomcat7-maven-plugin:run plugin? Estoy luchando por encontrar la sintaxis correcta para que funcione bien. Cuando ejecuto el comando maven para ejecutarlo, solo ejecuta el primero que encuentra en la jerarquía del proyecto. Y si los ejecuto con el <fork>true</fork> u obviamente desde diferentes terminales, entonces obtengo "java.net.BindException: dirección que ya está en uso: 8080".

Respuesta

1

usar algo como

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

Supongo que es un pedazo de configuración para definir el contexto que se ejecuta dentro del módulo actual como raíz? es decir, ¿esa sería la forma de agregar mi "bar.war" como "/ bar" en el pom.xml de mi "foo.war" como "/"? No funcionó directamente debido a las dependencias, pero todavía estoy jugando con eso. – mckamey

+0

Parece que no puedo manejar las dependencias de "bar.war". Intenté agregarlos explícitamente así http://stackoverflow.com/a/9928987/43217 pero no tuve suerte. – mckamey

+0

Además, si trato de agregar "bar.war" como una dependencia del alcance "tomcat" al propio módulo, primero se genera primero y el comando tomcat7: run intenta ejecutarlo en su lugar. – mckamey

19

Como ya se sugirió, utilice <webapps> la sección de configuración del plugin, además de añadir parámetro adicional <asWebapp>true</asWebapp> para cada aplicación web, es decir:

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

Estas aplicaciones web adicionales se despliegan con ${artifactId} ruta de contexto de forma predeterminada.

Parece que sin este parámetro webapps adicionales se descartan silenciosamente cuando ejecuta algo como mvn tomcat7:run (probado en la versión estable 2.0). Related Jira issue dice que se hizo por "compatibilidad hacia atrás".

+0

Hola, solo una nota sobre esto que podría ayudar a alguien más ... Este consejo de Vasyl resolvió mi problema, pero tuve que actualizar tomcat7-maven-plugin a 2.0 de 2.0-beta-1 antes de que funcionara. Hubo un error en esa versión anterior a la versión 2.0 que impedía el funcionamiento de webapps: https://issues.apache.org/jira/browse/MTOMCAT-169 –

+0

¿Hay alguna manera de anular la ruta de contexto de la aplicación web con este enfoque? ? – hoshposh

+4

@hoshposh Veo el parámetro 'contextPath' en la clase del complemento' org.apache.tomcat.maven.common.config.AbstractWebapp', por lo que agregar algo como ' ... /mypath ...' debería trabajo. –

Cuestiones relacionadas