В настоящее время я изучаю Maven для конкретного проекта.В этом проекте мне нужно иметь несколько модулей (в смысле набора классов и ресурсов), которые зависят друг от друга.В частности, мне нужен модуль для хранения классов общедоступного API (API - это API Java, поскольку программа для настольных компьютеров может загружать надстройки во время выполнения), другой для набора общих классов, которые совместно используются клиентом и сервером.но они не являются частью API, и, конечно же, каждому клиенту и серверу нужен каждый модуль.
Используя систему, которую я использовал до Maven (система сборки IntelliJ Idea), я просто создал бы разные модули иустановить зависимости, используя графический интерфейс IntelliJ.Это хорошо работает, потому что я могу затем поместить весь проект IntelliJ Idea в репозиторий git и хранить все в хорошем состоянии вместе без суеты и проблем.
Однако, исследуя, как это сделать в Maven, я столкнулся с некоторыми проблемами.В документации Maven есть раздел , который, кажется, объясняет, как сделать что-то подобное, но у его техники есть две проблемы.Когда каждому подпроекту с собственным pom.xml необходимо указать версию других подпроектов, от которых он зависит it.Это означает, что мне нужно вносить много изменений по всему проекту, когда меняется версия.Это (надеюсь) будет довольно часто.Поскольку вполне вероятно, что мой проект будет состоять из сотен модулей, это, очевидно, нецелесообразно.
Кроме того, основываясь на моем другом исследовании, похоже, что репозиторий Maven задействован в документированной технике.В частности, похоже, что когда, например, модуль API создается для включения в клиентский и серверный модули, он сначала будет помещен в локальный репозиторий, а затем клиентский и серверный модули извлекут его оттуда.Это звучит проблематично, так как модуль API также будет опубликован в общедоступном репозитории (может быть, Maven central, я на самом деле не слишком много думал об этом - но он будет публичным в репозитории), и этот шаг репозитория, кажется, можетв конечном итоге создайте клиент и сервер с опубликованным jar, а не локальным, что проблематично по многим причинам.(например, если разработчик вносит локальные изменения в api jar, создание половины проекта без этих изменений является проблемой).
Есть ли лучший способ объединить несколько модулей для смягчения этих проблем (версии повсюдуа где баночки получаются неправильно из репо)?Лучше вместо этого изменить технику в связанной документации?Я что-то неправильно понимаю, и проблемы не существуют?
Я проверил DuckDuckGo и все соответствующие вопросы, которые я могу найти в StackOverflow, и ни один из них не решает ни одну из двух вышеупомянутых проблем.
¹:
<dependencies>
<dependency>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>