Совместное использование статических ресурсов между модулями 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
- Добавьте в 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} - не установлен.