【问题标题】:gradle spring boot starter-logging failing with Logback errorsgradle spring boot starter-logging 失败并出现 Logback 错误
【发布时间】:2016-03-17 14:16:31
【问题描述】:

我有一个 spring-boot 启动器 web 应用程序。最近我收到了与类路径上的 Logback 相关的错误。以下是我当前的 gradle 文件:

buildscript {
    ext {
        springBootVersion = '1.3.1.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
    classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    classpath('io.spring.gradle:dependency-management-plugin:0.5.2.RELEASE')
    classpath 'net.saliman:gradle-cobertura-plugin:2.3.0'
    }
}

apply plugin: 'groovy'
apply plugin: 'spring-boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'war'


repositories {
    mavenCentral()
}

configurations {
    providedRuntime
}

configurations {
    all*.exclude module: 'spring-boot-starter-logging'
}

dependencies {
    compile 'com.github.groovy-wslite:groovy-wslite:1.1.2'
    compile('org.springframework.boot:spring-boot-starter-web') 

    compile("org.springframework.boot:spring-boot-starter-data-rest")
    compile("org.springframework.boot:spring-boot-starter-data-jpa") 
    compile('org.springframework.boot:spring-boot-starter-log4j')
    compile('org.codehaus.groovy:groovy')
    compile("org.apache.accumulo:accumulo-core:1.6.2") {
        exclude module: "slf4j-log4j12"
    }

    compile("com.h2database:h2")

    providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')
    testCompile('org.springframework.boot:spring-boot-starter-test')

    testCompile 'com.github.groovy-wslite:groovy-wslite:1.1.2'
    testCompile 'org.codehaus.groovy:groovy-json:2.4.5'
    testCompile 'org.spockframework:spock-core:1.0-groovy-2.4'
    testCompile 'org.spockframework:spock-spring:1.0-groovy-2.4'
    testCompile 'cglib:cglib-nodep:3.1'

}

tasks.withType(Test) {
    systemProperty 'spring.profiles.active', 'test'
}

有了这个配置,我可以运行war或者使用bootRun来启动应用程序。但是,我的 spring 集成测试都失败了并出现错误

Caused by: java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation

我查看了互联网,特别是这些stackoverflowquestions 的解决方案。这些问题的问题和答案帮助我能够通过排除 Logback 来运行应用程序。然而,测试仍然失败。 This article,特别是帮助我确保 logback 不在依赖关系树中。当我跑步时

gradlew -q dependencies --configuration compile

并查看输出,使用上面的 build.gradle 文件在依赖树中找不到 logback。但是,运行如下所示的 Spring 集成测试会失败,并显示上面粘贴的错误消息:

@SpringApplicationConfiguration(classes = Application.class, initializers = ConfigFileApplicationContextInitializer.class)
@WebIntegrationTest
class CanaryIntegrationSpec extends Specification {
@Value('${local.server.port}') int port

def "when we call single test endpoint then we get a response back"() {
    when:
    ResponseEntity entity = new RestTemplate().getForEntity("http://localhost:$port/query/test", String.class)

    then:
    entity.statusCode == HttpStatus.OK
    entity.body == /{"hello":"world"}/
}
}

TL;DR:我的配置适用于运行战争,但现在所有集成测试都失败了。如何修复我的配置以使测试再次通过?

【问题讨论】:

    标签: gradle spring-boot


    【解决方案1】:

    改为以 logback 为目标。替换:

    configurations {
        all*.exclude module: 'spring-boot-starter-logging'
    }
    

    与:

    configurations {
        all*.exclude module: 'spring-boot-starter-logging'
        all*.exclude module: "logback-classic"
    }
    

    并从 Accumulo 中删除排除项。那就是替换:

    compile("org.apache.accumulo:accumulo-core:1.6.2") {
        exclude module: "slf4j-log4j12"
    }
    

    与:

    compile("org.apache.accumulo:accumulo-core:1.6.2")
    

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2014-12-27
      • 2021-01-18
      • 2014-12-29
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      相关资源
      最近更新 更多