Хорошо, вот интересный опыт, который я имел с прошлой пары недель, структурируя мой проект с несколькими модулями maven.
Когда я решил использовать maven для управления жизненным циклом сборки, у меня было несколько причин, по которым я хотел выбрать maven.
а. В основном команды разработчиков разделены так, что каждая команда может работать над отдельным модулем в рамках проекта, например Team-A, для работы в системе управления пользователями, Team-B для работы в системе авторизации, Team-C для работы в системе управления документами... и скоро. В каждой команде есть разработчики Java, тестеры, эксперты пользовательского интерфейса и т.д.
Таким образом, структура проекта maven должна быть такой, чтобы каждая команда могла самостоятельно работать над своими соответствующими модулями. Они должны иметь возможность кодировать, компилировать, строить, тестировать, развертывать свой модуль без компиляции, тестировать модули, принадлежащие другим командам.
И поэтому я пришел к выводу, что каждый модуль разработки многомодового проекта maven должен представлять функциональный модуль
После некоторых обсуждений на форумах я обнаружил, что люди, предлагающие мне следовать многоуровневому подходу, были дочерними модулями, которые должны быть такими слоями, как слой уровня управления, уровень сервиса, дао-слой и т.д. Я не обращал внимания на этот совет, потому что это не решение моего цель команд, работающих над отдельным модулем. Таким образом, для большого проекта увеличивается время сборки и развертывания для каждой команды во время разработки, что влияет на временные линии проекта. иногда время сборки и развертывания составляет до 30 минут, если в проекте есть 10-11 модулей.
Но я обратил внимание на предположение о том, что сохранение уровня DAO для каждого модуля не является хорошей идеей, поскольку DAO очень гранулирован и повторно используется другими модулями. и, следовательно, зависимость одного модуля от другого будет каким-либо образом увеличиваться.
Я нашел решение этой проблемы, создав общий модуль и переместив DAO и DOMAIN в общий модуль, который будет унаследован как зависимость от каждого модуля. И это, кажется, более жизнеспособный вариант. Теперь структура проекта выглядит следующим образом.
Теперь, когда я строю проект и запускаю webapp на сервере, он жалуется на 404, Resource Not Found. Я обнаружил, что это происходит потому, что папка WEB-INF/classes отсутствует, src/main/java отсутствует в модуле веб-приложения. Я искал и нашел пару ссылок, которые предположили, что это проблема сборки развертывания в Eclipse. Поэтому мне нужно вручную создать эти папки и добавить в сборку развертывания, потому что maven не делает этого.
Но большие вопросы:
- Мне нужно переместить классы Controller, такие как com.mycompany.usermgmtsys.controller.UserMgmtController и т.д. в src/main/java. Или maven должен найти контроллеры из модулей, включенных как зависимость в WEB-INF/lib.
Я не хочу этого делать, например, вставляя java файл в веб-приложение. Я хочу, чтобы все контроллеры были доступны для веб-приложения в качестве зависимости, например, WEB-INF/lib/usermgmtsystem.jar. Но тогда Tomcat не будет искать контроллеры в папке классов.
Я не знаю, что мне делать? Любые предложения будут оценены.