Модульное веб-приложение с Spring и Maven

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

Проект состоит из базового сайта и нескольких модулей. Например, один модуль обеспечит регистрацию пользователя, другой модуль предложит веб-службу и т.д....

Всякий раз, когда мне нужно доставлять приложение новому клиенту, идеальным было бы подобрать модули, которые он хочет, сделать некоторые темы (css, изображения, возможно, jsp) и разработать настраиваемые модули, которые ему могут понадобиться, если они есть.

Я взглянул на многомодовые проекты maven, военные накладки, но мне сложно разбить приложение, особенно в отношении конфигурации модулей (например, слияние глобальной конфигурации spring из модулей). Может ли кто-нибудь указать мне пример такой системы? Спасибо заранее!

Ответ 1

Конфигурация

merging spring проста. В каждом модуле упакуйте в него контекстный файл spring/WEB-INF/classes. Когда вы накладываетесь, все классы и ресурсы в классах WEB-INF в зависимости будут помещены в WEB-INF/классы в вашем приложении. (ps, это также работает, если вы упаковываете как .jar, но вы не сможете накладывать файлы .jsp, если вы это делаете)

Тогда это просто вопрос их импорта. Это лучше всего сделать, используя набор шаблонов для поиска файлов. Вот пример:

<import resource="classpath*:/module/*-context.xml" />

Это импортирует все ресурсы класса, соответствующие этому шаблону.

Пример, основанный на аннотации:

@Configuration
@ImportResource(value={"classpath*:/module/*-context.xml"})
public class MyConfiguration { ... }

Это конфигурация web.xml, которая вызовет у вас больше проблем, чем что-либо, если вам понадобится выполнить любые настройки web.xml в модулях. Конечно, вы можете использовать сервлет 3.0 для этого, но для этого требуется правильный сервер.

Ответ 2

fwiw, после некоторого опыта с простым Spring импортом мы разработали крошечную структуру для osgi-less модульности для Spring. Первая проблема с импортом - это столкновение имен bean, вы не можете иметь одноименный одноэлемент в двух контекстах и ​​многие другие проблемы.. tbc https://github.com/griddynamics/banshun

- Mike