Приложение Kotlin / Corda / SpringBoot, вызывающее SLF4J StackOverflowError - PullRequest
0 голосов
/ 25 апреля 2020

Я не совсем уверен, почему это перестало работать. Мой проект работал несколько недель go, но я просто попытался запустить его снова, и я просто получаю StackOverflowError в отношении регистрации

Приложение, которое я запускаю, не вызывает это потому, что я заменил метод main на что-то пустое:

class Application {
    companion object {
        @JvmStatic
        fun main(vararg args: String) {
            println("Hello, world.");
        }
    }
}

Получение следующей ошибки в консоли (я вырубил большую ее часть, потому что это просто повторение того, что вызывает StackOverflowError):

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/user/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-slf4j-impl/2.11.2/4d44e4edc4a7fb39f09b95b09f560a15976fa1ba/log4j-slf4j-impl-2.11.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/user/.gradle/caches/modules-2/files-2.1/ch.qos.logback/logback-classic/1.2.3/7c4f3c474fb2c041d8028740440937705ebb473a/logback-classic-1.2.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.apache.logging.slf4j.Log4jLoggerFactory]
Exception in thread "main" java.lang.StackOverflowError
    at org.apache.logging.log4j.util.StackLocator.getCallerClass(StackLocator.java:121)
    at org.apache.logging.log4j.util.StackLocatorUtil.getCallerClass(StackLocatorUtil.java:55)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:42)
    at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:46)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:39)
    at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:37)
    at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:29)
    at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:52)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:39)
    at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:37)
    at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:29)
    at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:52)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:39)
    at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:37)
    at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:29)
    at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:52)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)

Это мои зависимости gradle:

dependencies {
    // Main
    implementation "$kotlin_group:kotlin-stdlib-jdk8:$kotlin_version"
    implementation "$corda_group:corda-core:$corda_release_version"
    implementation "$corda_group:corda-rpc:$corda_release_version"
    implementation "$springboot_group:spring-boot-starter-web:$springboot_release_version"

    implementation "$newco_group:newco-kotlin-core:$newco_kotlin_core_release_version"
    implementation "$newco_group:newco-kotlin-libex:$newco_libex_release_version"
    implementation "$newco_group:newco-kotlin-libex-services:$newco_libex-services_release_version"
    implementation "$newco_group:newco-corda-fintex-contract:$newco_fintex_release_version"
    implementation "$newco_group:newco-corda-fintex-workflow:$newco_fintex_release_version"
    implementation "$newco_group:newco-corda-fintex-integration:$newco_fintex_release_version"

    implementation project(":cordapp-contract")
    implementation project(":cordapp-workflow")
    implementation project(":cordapp-integration")

    // Test
    testRuntimeOnly "$junit_group:junit-jupiter-engine:$junit_version"
    testImplementation "$junit_group:junit-jupiter-api:$junit_version"
    testImplementation "$kotlin_group:kotlin-test:$kotlin_version"
    testImplementation "$corda_group:corda-node-driver:$corda_release_version"
}

Я пытался добавить это в gradle, но безрезультатно:

configurations {
    all {
        exclude module: 'slf4j-log4j12'
        exclude module: 'jms'
        exclude module: 'jmxtools'
        exclude module: 'jmxri'
    }
}

Есть идеи? - Понятия не имею, с чего начать

1 Ответ

1 голос
/ 25 апреля 2020

Кажется, что при инициализации интерфейсов и реализации журналирования существует бесконечное значение l oop, которое вызывает StackOverflowError.

У вас есть несколько привязок журналов на вашем пути к классам, как видно из вывода журнала:

SLF4J: путь к классу содержит несколько привязок SLF4J.

Исключение либо log4j, либо logback из ваших зависимостей должно исправить вашу проблему.

Убедитесь, что вы используете Правильное исключение ссылки. Основываясь на выводе журнала, я думаю, что вы должны исключить log4j-slf4j-impl вместо slf4j-log4j12 (или что-то в этом духе).

...