Сценарий таков: у меня есть веб-приложение, которое я хочу динамически запускать с помощью tomcat: run target tomcat-maven-plugin. Проблема состоит в том, что у меня есть многочисленные ресурсы пути к классам, которые должны различаться между упакованным артефактом и тем, который запускается с локальной рабочей станции.
Неудачные попытки:
1.) Моей первой попыткой было использование builder-helper-maven-plugin, но он не сработает, поскольку целевые файлы конфигурации (непоследовательно!) Попадут в упакованный архив WAR.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>add-resource</id>
<phase>generate-resources</phase>
<goals>
<goal>add-resource</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>${basedir}/src/main/resources-env/${testEnv}</directory>
<targetPath>${basedir}/target/classes</targetPath>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
2.) Моя вторая попытка состояла в том, чтобы добавить папку (так как файлы, которые должны быть развернуты, еще не присутствуют в classpath Tomcat) в -Djava.ext.dirs, но это не имеет никакого эффекта (я на самом деле подозревать, что этот элемент systemProperties
неправильно настроен или вообще не работает). См:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.0-beta-1</version>
<configuration>
<tomcatWebXml>${basedir}/src/main/mock/web.xml</tomcatWebXml>
<systemProperties>
<property>
<name>java.ext.dirs</name>
<value>${basedir}/src/main/resources-env/${testEnv}</value>
</property>
</systemProperties>
<path>/licensing</path>
</configuration>
</plugin>
Я не уверен, что делать дальше. Суть проблемы заключается в том, что в этом плагине отсутствует элемент Surefire <additionalClasspathElement>
.
Следующим шагом будет создание пользовательских catalina.properties и добавление его в <configurationDir>
? Если да, то как должна выглядеть catalina.properties?
Редактировать: более подробное объяснение следует
Я понимаю, что этот вопрос выглядит несколько расплывчато, поэтому я попытаюсь немного уточнить.
My POM использует функциональность webResources плагина WAR для копирования некоторых конфигурационных файлов, специфичных для среды, и без использования профиля для этого путем копирования в ресурс с именем /src/main/resources-env/${env}
, например, так:
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
...
<configuration>
...
<webResources>
<!-- Copy Environment-specific resources to classes -->
<resource>
<directory>${basedir}/src/main/resources-env/${env}</directory>
<targetPath>WEB-INF/classes</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
Это скопирует ресурсы среды (по умолчанию, DEV) в пакет и в настоящее время работает нормально. Также обратите внимание, что, поскольку они происходят как часть упаковки, цель tomcat:run
никогда не предназначена для них (что желательно, поскольку среда различается).
Таким образом, проблема заключается в следующем: при выполнении динамического tomcat:run
приложение завершится сбоем, поскольку его пути к классам (он смотрит на target/classes
) будет не хватать необходимых локальных файлов конфигурации среды рабочей станции. Все, что мне нужно сделать, это получить их по пути для tomcat, но я хотел бы сделать это, не добавляя ничего в командную строку и определенно , не нарушая целостность сборки, если кто-то последует с mvn package
и не clean
первый.
Надеюсь, это более понятно.