Ответ 1
Первое, что я хотел бы предложить изменить структуру проектов.
--com
--example
--parent
--0.0.1-SNAPSHOT
--parent-0.0.1-SNAPSHOT.pom
--child1
--0.0.1-SNAPSHOT
--child1-0.0.1-SNAPSHOT.jar
--child1-0.0.1-SNAPSHOT.pom
--child2
--0.0.1-SNAPSHOT
--child2-0.0.1-SNAPSHOT.jar
--child2-0.0.1-SNAPSHOT.pom
Я предлагаю пойти следующим образом:
--parent (pom.xml)
+--child1
+--child2
Родитель может быть включен в управление версиями (Git, SVN) либо в мастер, либо в магистраль. Кроме того, все дочерние элементы должны ссылаться на родителя следующим образом:
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>child1</artifactId>
и в вашем родителе вы можете использовать такие вещи:
<groupId>com.example</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>child1</module>
<module>child2</module>
</modules>
Кроме того, вы можете использовать компанию pom просто путем добавления родительской ссылки к родительскому проекту:
<parent>
<groupId>com.example</groupId>
<artifactId>master-pom</artifactId>
<version>0.0.1</version>
</parent>
<groupId>com.example</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>child1</module>
<module>child2</module>
</modules>
В компании pom вы можете (и должны) подключать разные версии плагинов и определять дефолты и предложения компаний для зависимостей с их соответствующими версиями.
Если вам нравится иметь компанию super-pom, вы просто создаете отдельный проект maven, который содержит только файл pom, который содержит ваши конфигурации, такие как плагины, зависимости и т.д. и, конечно же, проверяет его на управление версиями (Git, SVN и т.д..). отдельно от другого проекта.
Если вы хотите ссылаться на файл jar, что означает, другими словами, артефакт вашей многомодульной сборки, вы должны использовать правильный файл groupId, artifactId и версию. Если вам нравится использовать child1 в другом проекте, вам необходимо указать следующее:
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>child1</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
Важно понимать, что родительский элемент сборки нескольких модулей не является артефактом, который обычно используется, потому что на основе типа упаковки pom
он действительно не создает артефакт (файл jar).
Update:
Вы можете сделать это ограниченным образом только для области dependencyManagement с scope import
, но это предназначено только для использования в depdencyManagement и а не для зависимостей.
Другое решение может заключаться в создании отдельного фиктивного проекта, в котором также имеются зависимости от двух дочерних элементов как транзитивные отпечатки. Но это не красота.
Таким образом, решение состоит в том, чтобы просто добавить две или более зависимостей, которые вы используете в проекте, и что это.