Maven: Где разместить сгенерированные ресурсы для tomcat-maven-plugin?
У меня есть файлы CSS и JavaScript в каталоге src/main/webapp
моего проекта.
Я хочу присоединиться к объединенной и уменьшенной версии этих ресурсов в мой WAR файл и в место, где tomcat-maven-plugin
выбирает его.
Я использовал yuicompressor-maven-plugin для создания файлов и поместил его в ${project.build.directory}/${project.build.finalName}
. Он отлично работает для пакета maven, и эти ресурсы попадают в WAR файл, но как-то tomcat-maven-plugin
этого не видит. Должен ли я использовать для него другой каталог?
Мой pom:
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<path>/MyApp</path>
<warDirectory>${project.build.directory}/${project.build.finalName}</warDirectory>
</configuration>
</plugin>
<plugin>
<version>2.5.1</version>
<inherited>true</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<optimize>true</optimize>
<debug>true</debug>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<webResources>
<resource>
<directory>${basedir}/src/main/resources/META-INF</directory>
<filtering>true</filtering>
<targetPath>META-INF</targetPath>
<includes>
<include>context.xml</include>
</includes>
</resource>
</webResources>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<version>1.3.0</version>
<executions>
<execution>
<phase>process-resources</phase>
<configuration>
<excludes>
<exclude>**/*</exclude>
</excludes>
<aggregations>
<aggregation>
<output>${project.build.directory}/${project.build.finalName}/js/commons-pack.js</output>
<includes>
<include>${project.build.sourceDirectory}/../webapp/js1.js</include>
<include>${project.build.sourceDirectory}/../webapp/js2.js</include>
...
Что мне делать, чтобы mvn tomcat:run
также забрать мои сгенерированные файлы?
Ответы
Ответ 1
Используйте warSourceDirectory
:
<warSourceDirectory>${project.build.directory}/${project.build.finalName}</warSourceDirectory>
Вместо этого свойства конфигурации (warDirectory
) для tomcat-maven-plugin
:
<warDirectory>${project.build.directory}/${project.build.finalName}</warDirectory>
Согласно документации tomcat-maven-plugin, warSourceDirectory
- это то, где веб-ресурсы берутся, а его значение по умолчанию ${basedir}/src/main/webapp
. Это означает, что если вы не установите это свойство, вам нужно сгенерировать ваш унифицированный/мини файл JavaScript под ${basedir}/src/main/webapp
.
Если вы установите warSourceDirectory
в выходную папку, это означает, что вам нужно сгенерировать этот файл перед запуском Tomcat.
Ответ 2
В качестве альтернативы вы также можете использовать цель run-war
вместо run
, например. mvn tomcat6:run-war
. Это будет использовать взорванную войну в вашем каталоге сборки (и, таким образом, фильтрованные ресурсы). См. этот сайт. Существует также run-war-only
, который пропускает фазу упаковки.
Ответ 3
Обратите внимание, что плагин теперь поддерживается в Apache (так что немного обновите:-)) см. http://tomcat.apache.org/maven-plugin-2.0/.
Даже при работе с установкой я не уверен, что это оптимальное решение (относительно io и времени сборки).
Прогон tomcat должен иметь возможность использовать ресурсы из более чем одного каталога (я не уверен, что это возможно с текущим вложением tomcat api).
Можете ли вы добавить запрос функции здесь https://issues.apache.org/jira/browse/MTOMCAT
Спасибо