Существует большая проблема в определении этих понятий в сообществе maven. Вы правы, с указанием, что родителя-П является наследованием и модуль П является составом. Но, к сожалению, разделение этих двух концепций не имеет истории в maven. В документации maven четко говорится, что лучше их разделить. Это приведет к созданию этой идеальной структуры
app-api/
app-impl/
app-war/
app-parent/
pom.xml
Где pom.xml является модулем pom.
Но почти каждый проект, который вы увидите в секторе с открытым исходным кодом, не различает их.
У этого есть причина: многие плагины не отличаются друг от друга. И даже сам maven принимает другую настройку: если <relativePath>
не установлен, Maven предполагает, что родительский элемент находится в ..
. Поэтому каждый проект должен указывать на <relativePath>../app-parent</relativePath>
в качестве родителя.
Самый популярный плагин, который имеет огромные проблемы с упомянутой структурой, - это плагин maven-release-плагин! Вы столкнетесь с чужими проблемами, если не будете следовать предположению, что модуль-pom является родительским pom.
Худшая ошибка заключается в том, что плагин release не может заменить свойства версии в родительском объекте и не удается из-за SNAPSHOT-зависимостей. Ваш родитель, возможно, будет содержать что-то вроде этого
<properties>
<app-api.version>1.1-SNAPSHOT</app-api.version>
<app-impl.version>1.2-SNAPSHOT</app-impl.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>myorg</groupId>
<artifactId>app-api</artifactId>
<version>${app-api.version}</version>
</dependency>
<dependency>
<groupId>myorg</groupId>
<artifactId>app-impl</artifactId>
<version>${app-impl.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
Обычно, высвобождая эти свойства будут автоматически установлены в их версиях выпуска 1.1 и 1.2. Но релиз-плагин (проверенный до версии 2.2.2) терпит неудачу с сообщением о том, что модуль не может быть выпущен с зависимостями моментальных снимков.
Если вы только «пропустите» некоторые модульные модули, это может быть проблемой, если вы правильно определяете <relativePath>
. Но вы должны попробовать и ожидать некоторые ошибки в плагинах maven. Помимо этих ошибок, вы совершенно правы, чтобы разделить попов, и я бы попробовал, если у вас есть время сделать изолированную версию.
, это не ответит на ваш вопрос, но если вы разделили агрегацию от наследования (что я также склонны делать), почему вы наследуете от своих агрегаторов? в помах, которые получают агрегированные данные, не указывайте раздел или наследуйте от своего настоящего родителя. В принципе, «пустые» агрегирующие модули определяются как родители их подмодулей_ не являются обязательными. не делайте этого, если это не имеет смысла –
Hilikus