У меня есть проект maven, состоящий из родительского POM и нескольких подмодулей. Он компилируется и работает нормально внутри Intellij (я предполагаю, что это использует javac
, а не Maven).Зависимость, зависящая от Maven, которая не указана в POM
Когда я запустил maven clean install
, сборка завершилась неудачно из-за «RequireUpperBoundDeps», которая от the documentation означает, что версия, разрешенная во время сборки, ниже версии зависимости для того же артефакта. Вот (дезинфицировать) выход:
[INFO] --- maven-enforcer-plugin:1.4:enforce (enforce-maven) @ my-service ---
[WARNING] Rule 1: org.apache.maven.plugins.enforcer.RequireUpperBoundDeps failed with message:
Failed while enforcing RequireUpperBoundDeps. The error(s) are [
Require upper bound dependencies error for com.h2database:h2:1.3.168 paths to dependency are:
+-com.example.services:my-service:1.0.0-SNAPSHOT
+-com.h2database:h2:1.3.168
and
+-com.example.services:my-service:1.0.0-SNAPSHOT
+-com.example.libs:my-libs:2.0.0
+-com.h2database:h2:1.3.168 (managed) <-- com.h2database:h2:1.4.190
]
Это, кажется, подразумевает, что h2
прямая зависимость my-service
, но он не объявлен как таковой в любом РОМ, модуль или родителя. h2
должен поступать только от my-libs
. Кроме того, он утверждает, что h2
«управляется» версией 1.3.168
. Я понятия не имею, где он получает эту информацию. my-libs
h2
версия 1.4.190
.
Я попытался начать с совершенно свежей .m2
каталога, за исключением h2
из my-libs
зависимости, явно включая h2
под my-service
(обе версии). Ничего не работает и исключая h2
из результатов зависимости в NoSuchPropertyException
на одном из моих классов, которые взаимодействуют с базой данных (через JDBI).
Как я могу получить maven для распознавания правильной версии h2
для включения и успешного создания моего проекта?
Пробовал ли вы напечатать дерево зависимостей maven для вашего проекта? – Siddharth
Да. 'mvn dependency: tree' показывает' h2' как прямую зависимость 'my-service', даже если она не объявлена в pom. – tytk
Это показывает, что h2 является зависимостью my-libs, которая является зависимостью моего сервиса. H2 называется транзитивной зависимостью. Поэтому вам нужно взглянуть на файл pom my-libs. Это показывает, что вы в my-service объявили h2 с версией 1.3.168, тогда как он объявлен с 1.4.190, что является причиной правила соблюдения. Вы должны сначала проверить мои лики, и это родители ... search для dependencyManagement .... – khmarbaise