На прошлой неделе я опубликовал вопрос о том, как я могу создавать зависимые модули, и в результате было рекомендовано использовать инструмент сборки, такой как Maven или Ivy.Я решил использовать Maven, чтобы попытаться достичь того, что я хотел бы сделать.Мой проект в основном строит один военный файл, который развернут в Tomcat.Сами модули являются частью окончательного файла войны.Вот пример структуры модулей
Модуль 1
customerModule
|-webapp
|-jsp
|-customer
|-findCustomer.jsp
|-addNewCustomer.jsp
|-deleteCustomer.jsp
|-src
|-com
|-mycompany
|-customer
|-FindCustomerAction.java
|-AddCustomerAction.java
|-DeleteCustomer.java
Модуль2
productModule
|-webapp
|-jsp
|-product
|-productCustomer.jsp
|-addNewProduct.jsp
|-deleteProduct.jsp
|-src
|-com
|-mycompany
|-product
|-FindProductAction.java
|-AddProductAction.java
|-DeleteProduct.java
Модуль 3
commonModule
|-webapp
|-css
|-style.css
|-jsp
|-templates
|-coreTemplate.jsp
|-src
com
|-mycomany
|-common
|-Logger.java
|-Access.java
|-META-INF
|-MANIFEST.MF
|-context.xml
|-WEB-INF
|-lib
|-oraclejdbc.lib
|-log4j.lib
|-common.lib
|-struts-config.xml
|-tiles-def.xml
|-web.xml
Как вы, вероятно, видитеВсе вышеперечисленное все вместе образует одну заявку.То, что я хотел бы сделать, это закончить с артефактом для каждого модуля.Из-за смешения типов файлов (jsp, css, java) я не совсем уверен, что является подходящим артефактом.Диаграмма ниже показывает структуру файла войны, который я хотел бы закончить.
MyApp.war
|-webapp
|-css
|-style.css
|-jsp
|-customer
|-findCustomer.jsp
|-addNewCustomer.jsp
|-deleteCustomer.jsp
|-product
|-productCustomer.jsp
|-addNewProduct.jsp
|-deleteProduct.jsp
|-templates
|-coreTemplate.jsp
|-META-INF
|-MANIFEST.MF
|-context.xml
|-WEB-INF
|-lib
|-oraclejdbc.lib
|-log4j.lib
|-common.lib
|-customerModule.jar
|-productModule.jar
|-classes
|-com
|-mycomany
|-common
|-Logger.class
|-Access.class
|-struts-config.xml
|-tiles-def.xml
|-web.xml
Несколько замечаний - java-файлы в commonModule собраны и заканчиваются в WEB-INF / classes - java-файлы для customerModule заканчиваются как jar-файл в WEB-INF / lib -Java-файлы для productModule заканчиваются как файл jar в WEB-INF / lib - все jsps, css попадают в корень файла war
Как лучше всего хранить артефактдля каждого модуля в хранилище?
- Я мог бы использовать файл JAR, но он не может содержать файлы типа html (jsp, css, js и т. д.)
- Каждый модуль (кроме commonModule) будет содержать файл jar + файлы jsp, css.Я думаю о том, чтобы сохранить встроенный артефакт в виде zip-файла и извлечь его, когда MyApp.war создан для создания файла войны?
- Могу ли я сохранить артефакт для каждого модуля в виде файла войны, даже если только одинесть файл web.xml?
Как я могу реализовать это с помощью Maven
Я исследовал Maven и обнаружил, что возможно иметьмногомодульный проект со следующей структурой
MyApp.pom (родительский проект) commonModule.pom customer.pom product.pom
Если я заархивировал модули в хранилищекак бы я сослался на них из родительского проекта и разархивировал их для создания окончательного файла war?
- Можно ли автоматически запускать сборку родительского проекта, если какой-либо из дочерних проектов создается?
- Я не выяснил, как поддерживать версию каждого из дочерних проектов.Если я создаю проект заказчика, как родительский проект узнает, что в хранилище есть более новая версия customer.zip (или .jar)?
Предполагается, что в настоящее время хранилище содержит следующее
|-productModule.v.0.1.zip
|-customerModule.v.0.1.zip
|-commonModule.v.0.1.zip
Если я перестраиваю, то customerModule, а затем перестраиваем военный файлКупить сборку родительского проекта, перестраивает ли maven все остальные модули в хранилище, даже если они не изменились?Как именно это будет работать?
Где-нибудь есть пример проекта, который демонстрирует, как достичь вышеуказанного?Любые ссылки или ресурсы, которые показывают пример вышеупомянутого, были бы очень полезны.