Maven втягивает зависимость, которая не указана в POM
У меня есть проект maven, состоящий из родительского POM и нескольких субмодулей. Он компилируется и отлично работает в Intellij (я предполагаю, что это использует javac
, а не Maven).
Когда я запускаю maven clean install
, Сборка завершается неудачей из-за" RequireUpperBoundDeps", что из документации означает, что версия, разрешенная во время сборки, ниже версии зависимости для того же артефакта. Вот (санированный) вывод:
[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
, но она не объявляется как таковая ни в одном poms, модуле или родителе. 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
, чтобы включить и успешно построить мой проект?
1 ответ:
Я выяснил, что зависимость
h2
была вытянута из родительского pom (родителяmy-service
).mvn dependency:tree
был обманчив, поскольку он показываетh2
как прямую зависимость отmy-service
, что, по моему мнению, означало, что он должен быть объявлен вmy-service
pom. Это не было delcared вmy-service
pom-однако, это было объявлено в Родительском pom. Вот откуда взялась противоречивая версия.Объявив
h2
вmy-service
pom с заданной версией исправлена верхняя граница зависимостей ошибка.