Возможно ли предоставить Tomcat6 файл context.xml через плагин Maven Cargo?
Я бы хотел, чтобы файл Tomcat context.xml не попадал в каталог META-INF моего WAR-файла, если это возможно. Можно ли это сделать с помощью грузового плагина Maven? Я не могу найти правильную конфигурацию.
2 ответа
Эврика! После многих дней изучения этой проблемы я наконец нашел очень эффективное решение. Ключ заключается в том, чтобы взять файл фрагмента контекста Tomcat XML и использовать <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. Надеюсь, это кому-нибудь поможет.
Согласно https://tomcat.apache.org/tomcat-9.0-doc/config/context.html и https://tomcat.apache.org/tomcat-9.0-doc/config/context.html Tomcat 9 позволяет оформить индивидуальную заявкуcontext.xml
(проверено).
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.7.10</version>
<configuration>
<container>
<containerId>tomcat9x</containerId>
<systemProperties>
<file.encoding>UTF-8</file.encoding>
<spring.profiles.active>tomcat,datajpa</spring.profiles.active>
</systemProperties>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
</dependencies>
</container>
<configuration>
<configfiles>
<configfile>
<file>src/main/resources/tomcat/context.xml</file>
<todir>conf/Catalina/localhost/</todir>
<tofile>${project.build.finalName}.xml</tofile>
</configfile>
</configfiles>
</configuration>
<deployables>
<deployable>
<groupId>ru.javawebinar</groupId>
<artifactId>topjava</artifactId>
<type>war</type>
<properties>
<context>${project.build.finalName}</context>
</properties>
</deployable>
</deployables>
</configuration>
</plugin>
</plugins>
Я еще не нашел способ сделать это, но я нашел способ, который работает в моем проекте. В настоящее время у меня есть проект с 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>
Это очень грязно, но, по крайней мере, работает... пока. Одно быстрое замечание: мой комментарий о том, что он никогда не ищет версию в репозитории, возможно, на данный момент неверен; Я думаю, что в какой-то момент этот трюк мог быть нарушен изменением плагина зависимостей.