2010-11-29 42 views

Répondre

13

Eureka! Après plusieurs jours d'étude de ce problème, j'ai finalement trouvé une solution très efficace. La clé est de prendre votre fichier de fragment de contexte XML Tomcat et d'utiliser l'élément de fret <configfiles> pour le déposer dans le répertoire conf/Catalina/localhost sous le nom context.xml.default. Le seul inconvénient est que cela rendra vos définitions de contexte disponibles pour toutes les applications Web, mais cela ne devrait pas vraiment importer seulement Cargo utilise cette instance de Tomcat, il n'y a donc pas d'autre application web.

est ici la configuration:

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

Le résultat net est de modules WAR plus faux pour tester uniquement, et pas plus fusion de WARs. J'espère que cela aide quelqu'un.

+0

Cela a fonctionné à l'exception du fait que la cargaison 1.1.1 semble ne pas ajouter de nouveaux fichiers. J'étais seulement capable de remplacer les fichiers. – Ralph

2

Je n'ai pas encore trouvé le moyen de le faire, mais j'ai trouvé un travail qui fonctionne dans mon projet. J'ai actuellement un projet essentiellement 3 sous-modules:

dependencies 
    webapp 
    smoketest 

Lorsque je construis le projet « webapp », j'exécute la déclaration de plugin suivante:

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

Et puis quand je suis en mon Cargo/WebTest suite dans le projet SmokeTest, je précise le SmokeTest fichier WAR en tant que dépendance et dans ma configuration de la cargaison et mes deployrables ainsi:

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

Avec la dépendance l ooking quelque chose comme:

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

C'est extrêmement sale, mais ça marche au moins ... pour l'instant. Une note rapide: mon commentaire sur le forcer à ne jamais chercher une version dans le repo est peut-être incorrect à ce stade; Je pense que cette astuce peut avoir été cassée par une modification du plugin de dépendance à un moment donné.

+0

Moi aussi, j'ai essayé - et ça marche aussi pour moi. J'espérais juste me passer de l'artefact de WAR, car nous ne voulons pas/ne pouvons pas envoyer de WAR avec un fichier context.xml filtré. – HDave