http://www.sonatype.com/people/2008/04/how-to-share-resources-across-projects-in-maven/

чание: я не получил никакого ответа в первой версии этого вопроса, поэтому я изменил его, чтобы сделать его более общим ...

контекст

Мой проект разделен на несколько модулей 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 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? В частности, при развертывании любогоweb-app-X в Tomcat с использованием 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.

Ответы на вопрос(2)

Ваш ответ на вопрос