2016-03-02 220 views
13

从spring-boot 1.3.2升级到最近发布的1.3.3时,我们遇到了问题。弹簧引导从1.3.2升级到1.3.3:logback问题

我们的应用程序已经利用下面的依赖关系,每一个最新的,没有问题:

<neo4j.version>2.3.2</neo4j.version> 
    <sdn.version>4.0.0.RELEASE</sdn.version> 
    <sdn.rest.version>3.4.0.RELEASE</sdn.rest.version> 
    <neo4j.ogm.version>1.1.5</neo4j.ogm.version> 

今天我升级了弹簧引导和Spring数据Neo4j的基于应用程序,这将启动与运行良好春季启动1.3.2.RELEASE,从改变的pom.xml:

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.3.2.RELEASE</version> 
</parent> 

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.3.3.RELEASE</version> 
</parent> 

有了这个字面上是唯一的变化,现在的应用程序无法启动,并出现以下错误:

...

Failed to instantiate [ch.qos.logback.classic.LoggerContext] 
Reported exception: 
java.lang.AbstractMethodError: ch.qos.logback.classic.pattern.EnsureExceptionHandling.process(Lch/qos/logback/core/pattern/Converter;)V 
    at ch.qos.logback.core.pattern.PatternLayoutBase.start(PatternLayoutBase.java:88) 
    at ch.qos.logback.classic.encoder.PatternLayoutEncoder.start(PatternLayoutEncoder.java:28) 
    at ch.qos.logback.core.joran.action.NestedComplexPropertyIA.end(NestedComplexPropertyIA.java:167) 
    at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:317) 
    at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:196) 
    at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:182) 
    at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62) 
    at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:149) 
    at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:135) 
    at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:99) 
    at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:49) 
    at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:77) 
    at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:152) 
    at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:85) 
    at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55) 
    at org.slf4j.LoggerFactory.bind(LoggerFactory.java:143) 
    at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:122) 
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:378) 
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:328) 
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:349) 
    at com.mycompany.Application.<clinit>(Application.java:35) 

正如预期的那样,回到1.3.2.RELEASE不会引起任何问题。

到目前为止搜索没有迹可循。在使用spring-boot 1.3.2.RELEASE和1.3.3.RELEASE之间比较mvn dependency:tree输出,我可以看到ch.qos.logback:logback-classic和ch.qos.logback:logback-access jar的临时依赖关系具有从spring-boot 1.3.2.RELEASE的1.1.3更改为spring-boot 1.3.3.RELEASE的1.1.5,而ch.qos.logback:logback-core对于两种spring-boot版本都保持在1.1.3。

有没有人知道底层问题是什么(我猜这个类未能实例化已被删除或重定位)和/或 - 更重要的是 - 我能做些什么来解决它?

+0

请加'MVN依赖性输出:tree'。你可能有另一个依赖,它迫使它回到1.1.3,而不是使用Spring Boot 1.1.5。 –

回答

22

Spring Boot缺少对logback-core的一些依赖管理,允许不同的版本进入。我打开了an issue来解决这个问题。

在此期间,您可以通过添加自己的依赖管理到您的pom避免这个问题:

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-core</artifactId> 
      <version>${logback.version}</version> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 
+0

感谢Andy,您建议明确添加logback-core依赖项解决了问题。在我们的例子中,我将它设置为使用1.1.5。并添加了一条评论,指出在使用spring-boot 1.3.3时只需要这种依赖关系。 –

+0

@Andy看起来像架构有一个错误。应该声明元素。 – ivanenok

+0

@ivanenok谢谢。不确定审稿人为什么拒绝您的修改。我自己做的。 –