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 2

1 ответ:

Я выяснил, что зависимость h2 была вытянута из родительского pom (родителя my-service). mvn dependency:tree был обманчив, поскольку он показывает h2 как прямую зависимость от my-service, что, по моему мнению, означало, что он должен быть объявлен в my-service pom. Это не было delcared в my-service pom-однако, это было объявлено в Родительском pom. Вот откуда взялась противоречивая версия.

Объявив h2 в my-service pom с заданной версией исправлена верхняя граница зависимостей ошибка.