排除对maven的依赖

时间:2016-05-04 00:03:19

标签: java maven slf4j maven-shade-plugin

我的项目中存在冲突依赖项的问题。特别是,有两种slf4j日志记录的实现:slf4j-simple和logback-classic,我正在

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/apykhtin/.m2/repository/org/slf4j/slf4j-simple/1.7.19/slf4j-simple-1.7.19.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/apykhtin/.m2/repository/ch/qos/logback/logback-classic/1.1.3/logback-classic-1.1.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]
Exception in thread "main" java.lang.IllegalStateException: Unable to acquire the logger context
        at io.dropwizard.logging.LoggingUtil.getLoggerContext(LoggingUtil.java:46)

在运行时。

logback-classic对我来说是必须依赖的(因为dropwizard),但是slf4j-simple并不是真的,我想把它从我的超级项目中删除。只有它并不那么容易。

我的“超级罐子”依赖于“小罐子”,而“小罐子”又依赖于“slf4j-simple”。将排除在uber jar的pom中没有帮助:

<dependency>
    <groupId>com.my.unique.group</groupId>
    <artifactId>small-jar</artifactId>
    <version>0.1.2-SNAPSHOT</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
        </exclusion>
    </exclusions>
</dependency>

我认为因为小罐子是“阴影”。我的“超级罐子”使用的是maven-shade-plugin,而“小罐子”则没有。 我还尝试将slf4j-simple从着色中排除:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>1.6</version>
    <configuration>
    <artifactSet>
        <excludes>
            <exclude>org.slf4j:slf4j-simple:jar</exclude>
        </excludes>
    </artifactSet>
    ...
</plugin>

但也没有成功。 slf4j-simple仍然包含在我的超级jar中。 到目前为止,我的发展都与“超级罐子”有关。我可以对“小罐子”代码进行更改,但我想避免这种情况。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

我不确定你对“超级罐子”的意思。父项目?!

以任何方式使用mvn dependency:tree -Dincludes=:slf4j*查看它的来源,然后在较低的项目中定义依赖关系并排除传输,如上所述

希望这会有所帮助

答案 1 :(得分:0)

为什么小罐被遮蔽?看起来你可以让maven在编译小jar作为非阴影神器时处理slf4j的传递依赖,然后当你依赖你的“uber-jar”中的小jar时,排除必要的传递依赖(将是slf4j)。一旦它被着色,maven将无法排除依赖关系,因为据他所知,小jar中的所有东西都是单一的依赖。

我看到你想避免对小罐进行更改,但这通常是阴影的固有问题之一。我建议不要对小jar进行着色,或者至少从小jar阴影中排除slf4j,让maven将其作为正常的传递依赖项处理,可以在uber-jar的依赖配置中排除。