2010-11-29 2 views

ответ

13

Eureka! После многих дней изучения этой проблемы я наконец нашел очень эффективное решение. Ключ должен взять ваш файл фрагмента контекста XML Tomcat и использовать элемент груза <configfiles> для его отправки в каталог conf/Catalina/localhost с именем context.xml.default. Единственным недостатком является то, что это сделает ваши определения контекста доступными для всех веб-приложений, но это не имеет особого значения, только Cargo использует этот экземпляр Tomcat, поэтому нет другого веб-приложения.

Вот конфигурация:

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

Конечный результат является не более фиктивными WAR модулей для тестирования только, и не более сращивания войн. Надеюсь, это поможет кому-то.

+0

Он работал, за исключением того, что груз 1.1.1 швов не добавлял новые файлы. Я мог только заменить файлы. – Ralph 2011-06-24 13:34:24

2

Я еще не нашел способ сделать это, но у меня есть работа, которая работает в моем проекте. Я в настоящее время проекта по существу с 3 подмодулями:

dependencies 
    webapp 
    smoketest 

Когда я строй проекта «WebAPP», я выполнить следующий плагин заявление:

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

А потом, когда я работаю мой Груз/WebTest люкс в проекте SmokeTest, я указать smoketest файла WAR в качестве зависимости и в моей конфигурации Грузовой установить мои deployrables таким образом:

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

с зависимостями л что-то вроде:

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

Это очень грязно, но оно хотя бы работает ... пока. Одно быстрое замечание: мой комментарий о принуждении его никогда не искать версию в репо, возможно, неверен на данный момент; Я думаю, что этот трюк, возможно, был нарушен изменением плагина зависимостей в какой-то момент.

+0

Я тоже пробовал это - и он работает и на меня. Просто надеялся отказаться от отброшенного артефакта WAR - так как мы не хотим/не можем отправить WAR с фильтрованным файлом context.xml в нем. – HDave 2010-11-30 03:08:09