h2o-genmodel
это зависимость типа pom.Это означает, что вы используете его как агрегатор для нескольких зависимостей, чтобы сделать вашу жизнь проще.Ваша проблема возникает из-за того, что ai.h2o:deepwater-backend-api:jar:1.0.4
зависимость h2o-genmodel
имеет временную зависимость от org.slf4j:slf4j-log4j12:jar:1.7.5
.Вы можете отладить иерархию зависимостей с помощью подключаемого модуля зависимостей, запустите следующую команду:
> mvn dependency:tree
...
[INFO] \- ai.h2o:h2o-genmodel:pom:3.18.0.11
[INFO] +- net.sf.opencsv:opencsv:jar:2.3
[INFO] +- com.google.code.gson:gson:jar:2.6.2
[INFO] +- com.google.protobuf.nano:protobuf-javanano:jar:3.1.0
[INFO] \- ai.h2o:deepwater-backend-api:jar:1.0.4
[INFO] \- org.slf4j:slf4j-log4j12:jar:1.7.5
[INFO] +- org.slf4j:slf4j-api:jar:1.7.5
[INFO] \- log4j:log4j:jar:1.2.17
Чтобы исправить это, вы можете исключить зависимость slf4j-log4j12
из зависимости h2o-genmodel
следующим образом:
<dependency>
<groupId>ai.h2o</groupId>
<artifactId>h2o-genmodel</artifactId>
<version>3.18.0.11</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
Вы можете снова запустить команду дерева зависимостей maven, чтобы проверить, сколько осталось привязок slf4j.
Поскольку ошибка вызывает множественные привязки slf4j, я полагаю, как только вы убедитесь, что в привязке есть только одна привязка slf4jВ дереве зависимостей все будет хорошо во время выполнения.
ОБНОВЛЕНИЕ:
Более подробно, почему это решение работает:
Во-первых, зависимость ai.h2o:h2o-genmodel
объявлена как тип pom, потому что этокак это опубликовано.Maven-артефакт типа pom используется в двух случаях: как агрегатор для подмодулей или как агрегатор для зависимостей.В этом случае тип pom используется во втором сценарии, чтобы упаковать зависимости для ai.h2o:h2o-genmodel
.Чтобы изменить это, вы можете проверить свой локальный репозиторий maven (скорее всего, в $ {user.home} /. M2 / repository / ai / h2o / h2o-genmodel / 3.18.0.11 нет файла jar, только .pom. Пожалуйстапрочитайте эту документацию Введение в механизм зависимостей и Отношения POM
Другая проблема, возможно, заключается в том, что ai.h2o:h2o-genmodel
не придерживается рекомендованного способа переноса зависимостейпотому что он не использует <dependencyManagement>
, а вместо этого использует <dependencies>
. Из-за этого детали документации maven не работают точно так, как ожидалось. Чтобы преодолеть это, вы должны явно использовать ai.h2o:h2o-genmodel
для <dependencies>
и вручную откорректируйте область действия каждой зависимости. Я настоятельно рекомендую запустить mvn dependency:tree
, потому что будет отображаться область действия каждой зависимости. В своем выводе я удалил области действия, потому что не хотел, чтобы он получил ответ.
В заключение, почему в моем решении работает с зависимостью, объявленной как pom, а в @ kag0 не как pom, потому что ai.h2o:h2o-genmodel
относится к типу pom и maven Treatэто так же, потому что, когда <type>
отсутствует, это выводит его из помпона артефакта.