Возможно ли предоставить Tomcat6 файл context.xml через плагин Maven Cargo? - PullRequest
7 голосов
/ 29 ноября 2010

Я бы хотел, чтобы файл Tomcat context.xml находился вне каталога META-INF моего WAR-файла, если это возможно.Можно ли это сделать с помощью грузового плагина Maven?Я не могу найти правильную конфигурацию.

Ответы [ 2 ]

13 голосов
/ 11 декабря 2010

Эврика! После многих дней изучения этой проблемы я наконец нашел очень эффективное решение. Ключ заключается в том, чтобы взять файл фрагмента контекста 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 только для тестирования и больше нет слияния WAR. Надеюсь, это кому-нибудь поможет.

2 голосов
/ 30 ноября 2010

Я еще не нашел способ сделать это, но я нашел способ, который работает в моем проекте.В настоящее время у меня есть проект с по существу 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>

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

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

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

...