H2O.ai H2O-genmodel.jar包含sl4j结合(H2O.ai h2o-genmode

2019-11-04 20:00发布

当使用h2o-genmodel.jar (无论是从行家中央产生魔力时或者说是输出)SLF4J提供错误

SLF4J:类路径中包含多个SLF4J绑定
SLF4J:在找到结合[:文件:罐子!〜/ .ivy2 /缓存/ org.slf4j / SLF4J-log4j12 /瓶/ SLF4J-log4j12-1.7.5.jar /org/slf4j/impl/StaticLoggerBinder.class]
SLF4J:见http://www.slf4j.org/codes.html#multiple_bindings一个解释。

使用Maven或SBT的传递依赖排除不工作,所以现在我使用的是与魔力的jar输出和消除用手从罐内的依赖关系。

有一些使用H2O modelgen,而不必与罐子(使用maven代替将是可取的)内部手动一塌糊涂更好的办法?

Answer 1:

因此,这最终是太仓促的情况下SO张贴

使用Maven或SBT的传递依赖排除不起作用

结束了不为真。 我只是需要刷新SBT一次多。

我虽然离开了这个问题了参考。 mvnrepository.com可能表明这是一个POM的依赖,你应该包括像依赖

libraryDependencies += "ai.h2o" % "h2o-genmodel" % "3.18.0.11" % "runtime" pomOnly()

要么

<dependency>
    <groupId>ai.h2o</groupId>
    <artifactId>h2o-genmodel</artifactId>
    <version>3.18.0.11</version>
    <type>pom</type>
    <scope>runtime</scope>
</dependency>

但似乎从实验是不工作,并hex.genmodel...包将无法使用

要获得相关性问题,并在SLF4J拉不绑定,您应该使用

libraryDependencies += "ai.h2o" % "h2o-genmodel" % "3.18.0.11" exclude("org.slf4j", "slf4j-log4j12")

要么

<dependency>
    <groupId>ai.h2o</groupId>
    <artifactId>h2o-genmodel</artifactId>
    <version>3.18.0.11</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>


Answer 2:

h2o-genmodel这是一个POM类型依赖。 这意味着你使用它作为一个聚合的多个依赖,使您的生活更轻松。 从事实,你的问题出现ai.h2o:deepwater-backend-api:jar:1.0.4的依赖h2o-genmodel有一个短暂的依赖关系org.slf4j:slf4j-log4j12:jar:1.7.5 。 您可以通过使用依赖Maven插件调试依赖层次,运行以下命令:

> 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是因为这是它是如何发布的。 型聚甲醛的行家伪影是在两种情况下使用:作为子模块的聚合器或作为一个依赖性聚合。 在这种情况下,POM类型是在第二方案中所使用的,收拾依赖性ai.h2o:h2o-genmodel 。 为了varify这一点,你可以检查你的Maven本地仓库(最有可能在$ {}的user.home /。平方米/库/ AI / H2O / H2O-的genmodel / 3.18.0.11没有jar文件,只有.pom,请阅读本文档介绍相关机制和POM关系

另一个问题,可能是一个事实ai.h2o:h2o-genmodel不符合推荐的方法,因为它不使用包依赖<dependencyManagement>而是使用<dependencies> 。 正因为如此,在行家文档的细节是不完全按预期工作。 为了克服这一点,你必须使用ai.h2o:h2o-genmodel上明确<dependencies>并手动调整它背后每一个依赖的范围。 我强烈建议运行mvn dependency:tree ,因为会显示每个相关的范围。 在我的输出我删除了,因为范围我不希望它polute答案。

总之,为什么在我的解决方案可与依赖声明为POM和@ kag0还不如聚甲醛是因为ai.h2o:h2o-genmodel的类型是聚甲醛和Maven把它在相同的方式becaue当<type>缺少它从人工制品POM推断它。



文章来源: H2O.ai h2o-genmodel.jar contains sl4j binding