2010-11-29 17 views

Respuesta

13

Eureka! Después de muchos días de estudiar este problema, finalmente encontré una solución muy efectiva. La clave es tomar el archivo de fragmento de contexto XML de Tomcat y usar el elemento de carga <configfiles> para soltarlo en el directorio conf/Catalina/localhost con el nombre context.xml.default. El único inconveniente es que esto hará que las definiciones de contexto estén disponibles para todas las aplicaciones web, pero esto no debería importar solo que Cargo esté usando esta instancia de Tomcat, por lo que no hay otra aplicación web.

Aquí está la configuración:

<configuration> <!-- Deployer configuration --> 
    <type>standalone</type> 
    <properties> 
     <cargo.servlet.port>${tomcat6.port}</cargo.servlet.port> 
    </properties> 
    <deployables> 
     <deployable> 
     <groupId>com.myapp<groupId> 
     <artifactId>myapp-war</artifactId> 
     <type>war</type> 
     <properties> 
       <context>${tomcat6.context}</context> 
     </properties> 
     </deployable> 
    </deployables> 
    <configfiles> 
     <configfile> 
     <file>${basedir}/../config/tomcat-context.xml</file> 
     <todir>conf/Catalina/localhost/</todir> 
     <tofile>context.xml.default</tofile> 
     </configfile> 
    </configfiles> 
</configuration> 

El resultado neto es módulos WAR no más falsos para probar solamente, y no más la fusión de las guerras. Espero que esto ayude a alguien.

+0

Funcionó, excepto por el hecho de que la carga 1.1.1 no agrega nuevos archivos. Solo pude reemplazar archivos. – Ralph

2

No he encontrado una manera de hacer esto todavía, pero he encontrado un trabajo que funciona en mi proyecto. Actualmente tengo un proyecto esencialmente con 3 submódulos:

dependencies 
    webapp 
    smoketest 

Cuando estoy construyendo el proyecto "aplicación web", ejecuto la siguiente declaración plugin:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>create-war-smoketest</id> 
     <phase>verify</phase> 
     <goals> 
      <goal>war</goal> 
     </goals> 
     <configuration> 
      <webappDirectory>${project.build.directory}/exploded</webappDirectory> 
      <primaryArtifact>false</primaryArtifact> 
      <classifier>smoketest</classifier> 
      <webResources> 
      <resource> 
       <filtering>true</filtering> 
       <directory>src/test/resources/smoketest</directory> 
       <targetPath>META-INF</targetPath> 
       <includes> 
        <include>context.xml</include> 
       </includes> 
      </resource> 
      </webResources> 
     </configuration> 
     </execution> 
    </executions> 
</plugin> 

Y luego, cuando estoy corriendo mi de carga/suite WebTest en el proyecto SmokeTest, que especifica el archivo WAR SmokeTest como dependencia y en mi configuración de carga fijar mis deployrables así:

<deployables> 
    <deployable> 
     <groupId>${pom.groupId}</groupId> 
     <artifactId>webapp</artifactId> 
     <type>war</type> 
     <properties> 
      <context>smoketest</context> 
     </properties> 
    </deployable> 
</deployables> 

Con la dependencia de l Ooking algo como:

<dependencies> 
    <dependency> 
     <groupId>${pom.groupId}</groupId> 
     <artifactId>webapp</artifactId> 
     <version>${pom.version}</version> 
     <classifier>smoketest</classifier> 
     <type>war</type> 
     <scope>system</scope> 
     <!-- trick the dependency plugin to never look for it in the repo --> 
     <systemPath>${basedir}/../webapp/target/webapp-${pom.version}-smoketest.war</systemPath> 
    </dependency> 
</dependencies> 

Es extremadamente sucio, pero al menos funciona ... por ahora. Una nota rápida: mi comentario sobre forzarlo a que nunca busque una versión en el repositorio es posiblemente incorrecto en este punto; Creo que este truco puede haber sido roto por un cambio en el complemento de dependencia en algún momento.

+0

Yo también he intentado esto, y también funciona para mí. Solo esperaba prescindir del artefacto WAR descartable, ya que no queremos/no podemos enviar un WAR con un archivo context.xml filtrado en él. – HDave

Cuestiones relacionadas