Ну вот интересный опыт, который я имел с прошлой недели, структурируя свой проект с несколькими модулями maven.Проблемы с структурированием проектов Maven Multi Module
Когда я решил использовать maven для управления жизненным циклом сборки, у меня было несколько причин, по которым я хотел выбрать maven.
a. В основном команды разработчиков разделены так, что каждая команда может работать над отдельным модулем в рамках проекта, например Team-A, для работы в системе управления пользователями, Team-B для работы в системе авторизации, Team-C для работы в системе управления документами ... и скоро. В каждой команде есть разработчики java, тестеры, эксперты пользовательского интерфейса и т. Д.
Таким образом, структура проекта maven должна быть такой, чтобы каждая команда могла самостоятельно работать над своими соответствующими модулями. Они должны иметь возможность кодировать, компилировать, строить, тестировать, развертывать свой модуль без компиляции, тестировать модули, принадлежащие другим командам.
И, таким образом, я пришел к выводу, что каждый модуль развития Maven проекта мульти-модуль должен представлять собой функциональный модуль
После некоторых обсуждений на форумах я нашел людей, предлагая мне следовать многоуровневый подход был дочерние модули должны быть такими слоями, как слой контроллера, служебный слой, дао-слой и т. д. Я не обращал внимания на этот совет, потому что это не решает мою цель команд, работающих над отдельным модулем. Таким образом, для большого проекта увеличивается время сборки и развертывания для каждой команды во время разработки, что влияет на временные линии проекта. иногда время сборки и развертывания составляет до 30 минут, если в проекте есть 10-11 модулей.
Но я обратил внимание на предположение, что сохранение уровня DAO для каждого модуля не является хорошей идеей, так как DAO является очень узким и повторно используется другими модулями. и, следовательно, зависимость одного модуля от другого была бы такой, какой бы она ни стала больше.
Я нашел решение этой проблемы, создав общий модуль и переместив DAO и DOMAIN в общий модуль, который будет унаследован как зависимость от каждого модуля. И это, кажется, более жизнеспособный вариант. Теперь структура проекта выглядит так.
Теперь, когда я построить проект и запустить веб-приложение на сервере, он жалуется на 404, ресурс не найден. Я обнаружил, что это происходит потому, что папка WEB-INF/classes отсутствует, src/main/java отсутствует в модуле веб-приложения. Я искал и нашел пару ссылок, которые предположили, что это проблема сборки развертывания в Eclipse. Поэтому мне нужно вручную создавать эти папки и добавлять в сборку развертывания, потому что maven этого не делает.
Но большие вопросы
- мне нужно переместить классы контроллера как com.mycompany.usermgmtsys.controller.UserMgmtController и т.д .. в SRC/основной/Java Или мавена должны найти контроллеры от модульные банки, включенные как зависимость в WEB-INF/lib.
Я не хочу этого делать, например, вставлять java-файл в веб-приложение. Я хочу, чтобы все контроллеры были доступны для веб-приложения в качестве зависимости, например, WEB-INF/lib/usermgmtsystem.jar. Но тогда Tomcat не будет искать контроллеры в папке классов.
Я не знаю, что мне делать? Мы ценим любые предложения.
Вы хотите, чтобы ваши контроллеры/службы зависели от вашего веб-приложения? Это наоборот. Ваше веб-приложение является вашим клиентским слоем и должно быть на вершине вашей «стека» вашей архитектуры. Он должен вызывать в сервисный уровень, который затем организует запрос другим службам и/или доменному слою. – tdrury
Нигде в моем вопросе я не хотел отменять порядок зависимостей. Все, что я ожидаю, это заставить веб-приложение идентифицировать свои контроллеры из своих зависимых банок, упакованных в ходе войны, так что нет 404. Если вы посмотрите на структуру, у меня все еще есть правильный порядок зависимости, то есть Common (который содержит DAO и DOMAIN) как зависимость от UserManagement, которая действует как зависимость от веб-приложения. Проблема в том, что я включил соответствующие контроллеры в соответствующие дочерние модули, они не найдены в папке WEB-INF/classes, а они находятся в WEB-INF/lib как банке. – RaghaveShukla
Поскольку они являются зависимыми баночками, они должны быть в WEB-INF/lib. Это правильное поведение. – tdrury