Совместное использование статических ресурсов между модулями maven

У меня есть проект Maven с проектом parent-pom и 3 проекта maven-module. 2 модуля - это веб-приложения Java-EE, которые компилируются в файлы WAR. 1 из модулей содержит общий код JAVA, который разделяется между двумя другими проектами. Совместное использование кода JAVA было простым.

Вопрос, который у меня есть, заключается в том, как использовать общие статические ресурсы, такие как JavaScript, CSS и файлы изображений, не дублируя их в каждом веб-модуле? Я также хотел бы сделать это таким образом, чтобы я мог продолжить запуск веб-приложения из Eclipse и внести изменения, которые я делаю для статических файлов, автоматически доступных для запущенного сервера Eclipse.

Ответ 1

Попробуйте следующее:

1.

 |-- pom.xml
    |-- appsweb1 (war)
    |-- appsweb2 (war)
    |-- common (jar)
        |-- src/main/java
        |-- src/static_files
        |-- pom.xml
  1. Добавьте в pom appsweb1, appsweb2 или добавьте его в родительский pom и просто добавьте groupId, artifactId в child:
<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.4.2</version>
        <executions>
            <execution>
                <id>default-copy-resources</id>
                <phase>process-resources</phase>
                <goals>
                    <goal>copy-resources</goal>
                </goals>
                <configuration>
                    <overwrite>false</overwrite>
                    <outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}/WEB-INF/static_files</outputDirectory>
                    <resources>
                        <resource>
                            <directory>../common/src/main/static_files</directory>
                        </resource>
                    </resources>
                </configuration>
            </execution>
        </executions>
    </plugin>
</plugins>

Документация по плагину Maven Resources: https://maven.apache.org/plugins/maven-resources-plugin/

Ответ 2

Разделив вопрос @Eric на два, мы имеем:

1) Как поделиться общими статическими ресурсами, такими как JavaScript, CSS и графические файлы без дублирования их в каждом веб-модуле?

Согласно спецификации сервлета 3.0, вы можете совместно использовать ресурсы, помещая их в исходную папку src/main/resources. Чтобы это работало с динамическими файлами, такими как jsp, вы должны поместить файлы в папку META-INF/resources. Тогда структура вашего общего проекта (jar) будет выглядеть следующим образом:

mymodule
| src
| | main
|   | java
|     | [java code]
|   | resources
|     | META-INF
|       | resources
|         | [your static and dynamic files]

Если, например, ваш общий js файл находится в src/main/resources/META-INF/resources/js/myjsfile.js, его можно загрузить в html файл, используя путь: <script src="/js/myjsfile.js"></script>. Тот же подход действителен для ваших CSS файлов.

Дополнительная информация: вы можете включить общий JSP файл на вашу страницу, используя тег <jsp:include page=""/>. И, если вы используете Spring и настроили префикс viewResolver для чего-то вроде '/WEB-INF/view', вы должны включить ваши динамические файлы в указанные папки, то есть они будут помещены в папку ' SRC/главная/ресурсы/META-INF/ресурсы/WEB-INF/вид ".

2) Я также хотел бы сделать это таким образом, чтобы я мог продолжить запустить веб-приложение из Eclipse и внести изменения в статические файлы автоматически доступны для работающего сервера Eclipse.

Плагины серверов Eclipse используют информацию о конфигурации "сборки сборки" вашего проекта для отслеживания файлов и автоматической публикации изменений. В своем общем проекте вы можете изменить сборку развертывания двумя способами: вы можете либо a) щелкнуть правой кнопкой мыши в своем проекте → свойства → сборка развертывания → добавить → папку, а затем выбрать папку, содержащую ваши файлы для развертывания и мониторинга, или б) отредактируйте файл конфигурации '.settings/org.eclipse.wst.common.component', добавив что-то вроде

<wb-module deploy-name="mymodule">
    <wb-resource deploy-path="/" source-path="/src/main/resources"/>
</wb-module>

Если вы выберете второй подход, будьте осторожны, чтобы не прервать выполнение задачи развертывания.

Дополнительная информация: если вы используете плагин ресурсов Maven для фильтрации ресурсов, вы, вероятно, захотите добавить свою "целевую" папку в сборку развертывания вместо папки "src", поскольку последняя будет содержать нефильтрованные ресурсы с вашими свойствами - в формат $ {my.property} - не установлен.