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-servicepom. Это не было delcared вmy-servicepom-однако, это было объявлено в Родительском pom. Вот откуда взялась противоречивая версия.Объявив
h2вmy-servicepom с заданной версией исправлена верхняя граница зависимостей ошибка.