Лучшее решение для этого - создать простой проект родительского файла pom (с упаковкой 'pom') в общем для всех проектов вашей организации.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>your.company</groupId>
<artifactId>company-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<distributionManagement>
<repository>
<id>nexus-site</id>
<url>http://central_nexus/server</url>
</repository>
</distributionManagement>
</project>
Это можно построить, выпустить и развернуть в своем локальном нексусе, чтобы у каждого был доступ к его артефакту.
Теперь для всех проектов, которые вы хотите использовать, просто включите этот раздел:
<parent>
<groupId>your.company</groupId>
<artifactId>company-parent</artifactId>
<version>1.0.0</version>
</parent>
Это решение позволит вам легко добавлять другие общие вещи ко всем проектам вашей компании. Например, если вы хотите стандартизировать использование JUnit для конкретной версии, это было бы идеальным местом для этого.
Если у вас есть проекты, использующие многомодульные структуры, которые имеют своего родителя, Maven также поддерживает цепочечное наследование, поэтому вполне допустимо, чтобы родительский pom-файл вашего проекта ссылался на родительский pom вашей компании, а дочерние модули проекта даже не имели осведомлен о родителе вашей компании.
Я вижу из вашей примерной структуры проекта, что вы пытаетесь поместить ваш родительский проект на тот же уровень, что и ваш агрегатор pom. Если вашему проекту нужен собственный родительский объект, наилучший подход, который я нашел, состоит в том, чтобы включить родительский уровень на том же уровне, что и остальные модули, и чтобы ваш файл агрегатора pom.xml находился в корне, где существуют каталоги всех ваших модулей.
- pom.xml (aggregator)
- project-parent
- project-module1
- project-module2
Что вы делаете с этой структурой, так это включаете ваш родительский модуль в агрегатор и собираете все с помощью mvn install
из корневого каталога.
Мы используем это точное решение в моей организации, оно выдержало испытание временем и сработало для нас.