我的项目中存在冲突依赖项的问题。特别是,有两种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中。 到目前为止,我的发展都与“超级罐子”有关。我可以对“小罐子”代码进行更改,但我想避免这种情况。
我做错了什么?
答案 0 :(得分:0)
我不确定你对“超级罐子”的意思。父项目?!
以任何方式使用mvn dependency:tree -Dincludes=:slf4j*
查看它的来源,然后在较低的项目中定义依赖关系并排除传输,如上所述
希望这会有所帮助
答案 1 :(得分:0)
为什么小罐被遮蔽?看起来你可以让maven在编译小jar作为非阴影神器时处理slf4j的传递依赖,然后当你依赖你的“uber-jar”中的小jar时,排除必要的传递依赖(将是slf4j)。一旦它被着色,maven将无法排除依赖关系,因为据他所知,小jar中的所有东西都是单一的依赖。
我看到你想避免对小罐进行更改,但这通常是阴影的固有问题之一。我建议不要对小jar进行着色,或者至少从小jar阴影中排除slf4j,让maven将其作为正常的传递依赖项处理,可以在uber-jar的依赖配置中排除。