Если у вас есть родительский проект, вы можете объявить все зависимости и их версии в разделе dependencyManagement родительского pom. Этот не означает, что все проекты будут использовать все эти зависимости, это означает, что если проект объявит зависимость, он наследует конфигурацию, поэтому ему нужно будет объявить groupId и artifactId зависимости. Вы даже можете объявить дочерние проекты в зависимости от управления родителями без введения цикла.
Обратите внимание, что вы также можете сделать подобное с помощью плагинов, объявив их в разделе pluginManagement. Это означает, что любой ребенок, объявляющий плагин, наследует конфигурацию.
Например, если у вас есть 4 проекта, родительских, ядром, щий и Utils, вы можете объявить все внешние зависимости и внутренние версии проекта в материнской компании. Затем дочерние проекты наследуют эту конфигурацию для любых зависимостей, которые они объявляют. Если все модули должны иметь одну и ту же версию, их можно даже объявить как свойства родителя.
Пример родителя выглядит следующим образом:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>name.seller.rich</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>name.seller.rich</groupId>
<artifactId>ui</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>name.seller.rich</groupId>
<artifactId>core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>name.seller.rich</groupId>
<artifactId>utils</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<modules>
<module>utils</module>
<module>core</module>
<module>ui</module>
</modules>
</project>
И Utils, ядро, и пользовательский интерфейс проекты наследуют все соответствующие версии. Utils:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>name.seller.rich</groupId>
<artifactId>utils</artifactId>
<!--note version not declared as it is inherited-->
<parent>
<artifactId>parent</artifactId>
<groupId>name.seller.rich</groupId>
<version>1.0.0</version>
</parent>
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
</dependencies>
</project>
ядро:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>name.seller.rich</groupId>
<artifactId>core</artifactId>
<parent>
<artifactId>parent</artifactId>
<groupId>name.seller.rich</groupId>
<version>1.0.0</version>
</parent>
<dependencies>
<dependency>
<groupId>name.seller.rich</groupId>
<artifactId>utils</artifactId>
</dependency>
</dependencies>
УИ:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>name.seller.rich</groupId>
<artifactId>ui</artifactId>
<parent>
<artifactId>parent</artifactId>
<groupId>name.seller.rich</groupId>
<version>1.0.0</version>
</parent>
<dependencies>
<dependency>
<groupId>name.seller.rich</groupId>
<artifactId>core</artifactId>
</dependency>
</dependencies>
</project>
Fail @Kieveli для бесполезного неосторожного ответа. – Jherico
Я думаю, что общие/общие зависимости обязательно должны быть настроены в разделе dependencyManagement. Вопрос в том, как раз вы идете по этому пути, вы не должны добавлять все зависимости (общие или нет) в dependencyManagement. Я могу видеть про и минусы для обоих. Любые лучшие практики для этого? – Hardy