Примечание: я не получил никакого ответа в первой версии этого вопроса, поэтому я изменил его, чтобы сделать его более общим ...
Context
Мой проект разделен на несколько модулей maven и несколько веб-приложений.Вот структура:
my-project
+ pom.xml
+-- commons
+-- persistence
+-- ...
+-- web-app-1
+-- web-app-2
+-- ...
Все веб-приложения совместно используют общие ресурсы, такие как JS, CSS и файлы изображений.
Вместо дублирования этих ресурсов в каждом web-app-X
, я решилсоздать другой проект с именем web-resources
, который является проектом WAR.Структура тогда следующая:
my-project
+ pom.xml
+-- commons
+-- persistence
+-- ...
+-- web-app-1
+-- web-app-2
+-- ...
+-- web-resources
+-- pom.xml
+-- src/main/webapp
+-- web.xml (which is almost empty, just need to be present for Maven)
+-- web_resources
+-- css
+-- images
+-- javascript
Maven
В Maven 2 (или Maven 3, поскольку я только что перенес свой проект в maven 3.0.2), этой конфигурацией легко управлять, так как все web-app-X
объявляют web-resources
как зависимость:
<groupId>foo.bar</groupId>
<artifactId>web-app-1</artifactId>
...
<dependencies>
<dependency>
<groupId>foo.bar</groupId>
<artifactId>web-resources</artifactId>
<version>${preclosing-version}</version>
<type>war</type>
</dependency>
...
Поэтому, когда я собираю свой проект WAR, он сначала получает web-resources.war
(созданный непосредственно перед этим), распаковывает его и строит поверх него web-app-X
веб-приложение.Таким образом, мой WAR-файл будет содержать также каталог с именем web-resources/
, который содержит общие ресурсы.
Это принцип наложения войны.
Так что с точки зрения Maven, всеотлично!
Eclipse
Теперь возникает основная проблема: хорошая конфигурация Eclipse.
Вопрос : Как я могу использовать свой текущийКонфигурация будет правильно управляться Eclipse?В частности, когда я развертываю любую web-app-X
в Tomcat с использованием Eclipse ...
Обратите внимание, что я хочу получить более автоматизируемую (?) Конфигурацию и избегать любых ручных действий, так как эта конфигурация должна использоватьсядесятки разработчиков ...
На мой взгляд, лучшим решением, похоже, является использование связанных ресурсов Eclipse.Таким образом, я установил следующую конфигурацию в моем web-app-X
pom.xml:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<configuration>
<wtpversion>1.5</wtpversion>
<linkedResources>
<linkedResource>
<name>web_resources</name>
<type>2</type>
<location>${project.basedir}\..\web-resources\src\main\webapp\web_resources</location>
</linkedResource>
</linkedResources>
</configuration>
</plugin>
...
Когда я запускаю конфигурацию mvn eclipse:eclipse
, она успешно добавляет эту информацию в мой файл .project
:
<projectDescription>
...
<linkedResources>
<link>
<name>web_resources</name>
<type>2</type>
<location>C:\dev\project\web-resources\src\main\webapp\web_resources</location>
</link>
</linkedResources>
<projectDescription>
Теперь я импортирую свой проект в Eclipse.Проблема: в Project properties > Java Build Path > Source
я не вижу источника ссылки.Я вижу только четыре моих стандартных каталога Maven (src/main/java
, src/main/resources
, src/test/java
и src/test/resources
).Странно то, что когда я пытаюсь вручную добавить связанные ресурсы, он отказывается и говорит, что он уже существует ...
Поэтому, когда я развертываю свое веб-приложение на своем Tomcat в Eclipse, он делает не развертывать каталог web_resources, и поэтому я не получаю развернутые CSS / JS / images.
После некоторых испытаний кажется, что мне нужно сделать две модификации:
- Добавить строку
<classpathentry kind="src" path="web_resources" output="src/main/webapp/web_resources"/>
в мой файл .classpath
; - Удалить
<project>preclosing-web-resources</project>
в файле .project
.
Обратите внимание, что при использовании этой конфигурации Eclipse будет копировать (и сохранять синхронизацию) содержимое проекта web_resources в моем web-app-X/src/main/webapp/web_resources
, но это не проблема(этот каталог игнорируется SCM).
Единственное найденное мной автоматическое решение - создать простой плагин Maven, который выполняет две предыдущие модификации, а затем выполнить следующую команду (или использовать файл .bat).:
mvn eclipse:clean eclipse:eclipse myEclipsePlugin:eclipse
Вопрос
- Есть ли лучший способ управлять такой конфигурацией?
Техническая информация
Java 6, Maven 3.0.2, плагин maven eclipse 2.8, Eclipse 3.3.2 (но я могу протестировать с более новой версией Eclipse), нет Плагин m2eclipse.