Q:

java.lang.StackOverflowError when running Spring Boot app with Java 11

I am trying to run a simple hello world app in Spring Boot (2.1.2.RELEASE) on Java 11 (jdk-11.0.2) on Windows.  When I run the application with the Maven spring boot plugin I get the following Exception:
            Exception in thread "main" java.lang.StackOverflowError
                at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:408)
                at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
                at org.apache.commons.logging.LogAdapter$Slf4jAdapter.createLocationAwareLog(LogAdapter.java:130)
                at org.apache.commons.logging.LogAdapter.createLog(LogAdapter.java:91)
                at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:67)
                at org.slf4j.impl.JCLLoggerFactory.getLogger(JCLLoggerFactory.java:77)
                at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
                at org.apache.commons.logging.LogAdapter$Slf4jAdapter.createLocationAwareLog(LogAdapter.java:130)
                at org.apache.commons.logging.LogAdapter.createLog(LogAdapter.java:91)
                at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:67)
                at org.slf4j.impl.JCLLoggerFactory.getLogger(JCLLoggerFactory.java:77)
                at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
                at org.apache.commons.logging.LogAdapter$Slf4jAdapter.createLocationAwareLog(LogAdapter.java:130)

I have the following Java code:
            @SpringBootApplication
            @PropertySource(value = "${url/ELMProperties}", ignoreResourceNotFound = true)
            @PropertySource(value = "classpath:version/elm.properties")
            //TODO remove the below line once the data source has been configured
            @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
            public class Application extends SpringBootServletInitializer
            {
                @Override
                protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
                    return application.sources(com.test.Application.class);
                }

                public static void main(String[] args)
                {
                    SpringApplication.run(com.test.Application.class, args);
                    System.out.println("Hello world");
                }
            }

In order exclude  by adding the following in my pom.xml file:
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>${spring-boot.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

Here is my maven dependency tree:
            [INFO] --- maven-dependency-plugin:3.1.1:tree (default-cli) @ ep-elm-web ---
            [INFO] com.earthport.elm:ep-elm-web:war:2019.1.0-SNAPSHOT
            [INFO] +- com.earthport.security:ep-security-client:jar:2.1.0:compile
            [INFO] |  +- org.springframework:spring-context:jar:5.1.4.RELEASE:compile
            [INFO] |  |  \- org.springframework:spring-expression:jar:5.1.4.RELEASE:compile
            [INFO] |  +- org.springframework:spring-web:jar:5.1.4.RELEASE:compile
            [INFO] |  +- org.springframework.security:spring-security-core:jar:5.1.3.RELEASE:compile
            [INFO] |  +- org.springframework.security:spring-security-web:jar:5.1.3.RELEASE:compile
            [INFO] |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0:compile
            [INFO] |  +- com.fasterxml.jackson.core:jackson-core:jar:2.9.8:compile
            [INFO] |  \- com.google.guava:guava:jar:14.0:compile
            [INFO] +- com.earthport.shared:rabbit-support:jar:2.0.0:compile
            [INFO] |  +- org.springframework.amqp:spring-amqp:jar:2.1.3.RELEASE:compile
            [INFO] |  +- org.springframework.amqp:spring-rabbit:jar:2.1.3.RELEASE:compile
            [INFO] |  |  +- com.rabbitmq:amqp-client:jar:5.4.3:compile
            [INFO] |  |  \- org.springframework:spring-tx:jar:5.1.4.RELEASE:compile
            [INFO] |  +- org.springframework.retry:spring-retry:jar:1.2.3.RELEASE:compile
            [INFO] |  +- org.springframework:spring-aop:jar:5.1.4.RELEASE:compile
            [INFO] |  +- org.springframework:spring-core:jar:5.1.4.RELEASE:compile
            [INFO] |  |  \- org.springframework:spring-jcl:jar:5.1.4.RELEASE:compile
            [INFO] |  \- org.springframework:spring-beans:jar:5.1.4.RELEASE:compile
            [INFO] +- org.springframework.boot:spring-boot-starter:jar:2.1.2.RELEASE:compile
            [INFO] |  +- org.springframework.boot:spring-boot:jar:2.1.2.RELEASE:compile
            [INFO] |  +- org.springframework.boot:spring-boot-autoconfigure:jar:2.1.2.RELEASE:compile
            [INFO] |  +- javax.annotation:javax.annotation-api:jar:1.3.2:compile
            [INFO] |  \- org.yaml:snakeyaml:jar:1.23:runtime
            [INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.1.2.RELEASE:compile
            [INFO] |  +- org.springframework.boot:spring-boot-starter-json:jar:2.1.2.RELEASE:compile
            [INFO] |  |  +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.9.8:compile
            [INFO] |  |  \- com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.9.8:compile
            [INFO] |  +- org.hibernate.validator:hibernate-validator:jar:6.0.14.Final:compile
            [INFO] |  |  +- javax.validation:validation-api:jar:2.0.1.Final:compile
            [INFO] |  |  +- org.jboss.logging:jboss-logging:jar:3.3.2.Final:compile
            [INFO] |  |  \- com.fasterxml:classmate:jar:1.4.0:compile
            [INFO] |  \- org.springframework:spring-webmvc:jar:5.1.4.RELEASE:compile
            [INFO] +- org.springframework.boot:spring-boot-starter-data-jpa:jar:2.1.2.RELEASE:compile
            [INFO] |  +- org.springframework.boot:spring-boot-starter-aop:jar:2.1.2.RELEASE:compile
            [INFO] |  |  \- org.aspectj:aspectjweaver:jar:1.9.2:compile
            [INFO] |  +- org.springframework.boot:spring-boot-starter-jdbc:jar:2.1.2.RELEASE:compile
            [INFO] |  |  +- com.zaxxer:HikariCP:jar:3.2.0:compile
            [INFO] |  |  \- org.springframework:spring-jdbc:jar:5.1.4.RELEASE:compile
            [INFO] |  +- javax.transaction:javax.transaction-api:jar:1.3:compile
            [INFO] |  +- javax.xml.bind:jaxb-api:jar:2.3.1:compile
            [INFO] |  |  \- javax.activation:javax.activation-api:jar:1.2.0:compile
            [INFO] |  +- org.hibernate:hibernate-core:jar:5.3.7.Final:compile
            [INFO] |  |  +- javax.persistence:javax.persistence-api:jar:2.2:compile
            [INFO] |  |  +- org.javassist:javassist:jar:3.23.1-GA:compile
            [INFO] |  |  +- net.bytebuddy:byte-buddy:jar:1.9.7:compile
            [INFO] |  |  +- antlr:antlr:jar:2.7.7:compile
            [INFO] |  |  +- org.jboss:jandex:jar:2.0.5.Final:compile
            [INFO] |  |  +- org.dom4j:dom4j:jar:2.1.1:compile
            [INFO] |  |  \- org.hibernate.common:hibernate-commons-annotations:jar:5.0.4.Final:compile
            [INFO] |  +- org.springframework.data:spring-data-jpa:jar:2.1.4.RELEASE:compile
            [INFO] |  |  +- org.springframework.data:spring-data-commons:jar:2.1.4.RELEASE:compile
            [INFO] |  |  \- org.springframework:spring-orm:jar:5.1.4.RELEASE:compile
            [INFO] |  \- org.springframework:spring-aspects:jar:5.1.4.RELEASE:compile
            [INFO] +- org.springframework.boot:spring-boot-starter-amqp:jar:2.1.2.RELEASE:compile
            [INFO] |  \- org.springframework:spring-messaging:jar:5.1.4.RELEASE:compile
            [INFO] +- org.springframework.boot:spring-boot-starter-security:jar:2.1.2.RELEASE:compile
            [INFO] |  \- org.springframework.security:spring-security-config:jar:5.1.3.RELEASE:compile
            [INFO] +- org.springframework.boot:spring-boot-starter-actuator:jar:2.1.2.RELEASE:compile
            [INFO] |  +- org.springframework.boot:spring-boot-actuator-autoconfigure:jar:2.1.2.RELEASE:compile
            [INFO] |  |  \- org.springframework.boot:spring-boot-actuator:jar:2.1.2.RELEASE:compile
            [INFO] |  \- io.micrometer:micrometer-core:jar:1.1.2:compile
            [INFO] |     +- org.hdrhistogram:HdrHistogram:jar:2.1.9:compile
            [INFO] |     \- org.latencyutils:LatencyUtils:jar:2.0.3:compile
            [INFO] +- org.springframework:spring-context-support:jar:5.1.4.RELEASE:compile
            [INFO] +- com.fasterxml.jackson.core:jackson-databind:jar:2.9.8:compile
            [INFO] +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.9.8:compile
            [INFO] +- org.slf4j:slf4j-api:jar:1.7.25:compile
            [INFO] +- org.slf4j:slf4j-jcl:jar:1.7.25:compile
            [INFO] +- com.hazelcast:hazelcast-all:jar:3.6.2:compile
            [INFO] +- io.vavr:vavr:jar:0.9.1:compile
            [INFO] |  \- io.vavr:vavr-match:jar:0.9.1:compile
            [INFO] +- io.vavr:vavr-jackson:jar:0.9.1:compile
            [INFO] +- org.quartz-scheduler:quartz:jar:2.3.0:compile
            [INFO] |  +- com.mchange:c3p0:jar:0.9.5.2:compile
            [INFO] |  +- com.mchange:mchange-commons-java:jar:0.2.11:compile
            [INFO] |  \- com.zaxxer:HikariCP-java6:jar:2.3.13:compile
            [INFO] +- org.springframework.boot:spring-boot-starter-test:jar:2.1.2.RELEASE:test
            [INFO] |  +- org.springframework.boot:spring-boot-test:jar:2.1.2.RELEASE:test
            [INFO] |  +- org.springframework.boot:spring-boot-test-autoconfigure:jar:2.1.2.RELEASE:test
            [INFO] |  +- com.jayway.jsonpath:json-path:jar:2.4.0:test
            [INFO] |  |  \- net.minidev:json-smart:jar:2.3:test
            [INFO] |  |     \- net.minidev:accessors-smart:jar:1.2:test
            [INFO] |  |        \- org.ow2.asm:asm:jar:5.0.4:test
            [INFO] |  +- junit:junit:jar:4.12:test
            [INFO] |  +- org.assertj:assertj-core:jar:3.11.1:test
            [INFO] |  +- org.mockito:mockito-core:jar:2.23.4:test
            [INFO] |  |  \- net.bytebuddy:byte-buddy-agent:jar:1.9.7:test
            [INFO] |  +- org.hamcrest:hamcrest-core:jar:1.3:test
            [INFO] |  +- org.hamcrest:hamcrest-library:jar:1.3:test
            [INFO] |  +- org.skyscreamer:jsonassert:jar:1.5.0:test
            [INFO] |  |  \- com.vaadin.external.google:android-json:jar:0.0.20131108.vaadin1:test
            [INFO] |  +- org.springframework:spring-test:jar:5.1.4.RELEASE:test
            [INFO] |  \- org.xmlunit:xmlunit-core:jar:2.6.2:test
            [INFO] +- com.jayway.awaitility:awaitility:jar:1.6.3:test
            [INFO] |  +- cglib:cglib-nodep:jar:3.1:test
            [INFO] |  \- org.objenesis:objenesis:jar:2.1:test
            [INFO] +- io.vavr:vavr-test:jar:0.9.1:test
            [INFO] +- org.springframework.boot:spring-boot-starter-tomcat:jar:2.1.2.RELEASE:compile
            [INFO] |  +- org.apache.tomcat.embed:tomcat-embed-core:jar:9.0.14:compile
            [INFO] |  +- org.apache.tomcat.embed:tomcat-embed-el:jar:9.0.14:compile
            [INFO] |  \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:9.0.14:compile
            [INFO] +- org.projectlombok:lombok:jar:1.18.4:provided
            [INFO] +- c3p0:c3p0:jar:0.9.1.2:provided
            [INFO] +- com.earthport.db2:db2jcc4:jar:4.23.42:provided
            [INFO] \- commons-logging:commons-logging:jar:1.1.1:provided

Has anyone seen a similar error like this before?  This set up has not had problems when using Java 8.

A:

Your dependency on org.slf4j:slf4j-jcl  means that logging calls made using the SLF4J API will be passed to Commons Logging. Your dependency on org.springframework:spring-jcl means that calls to Commons Logging will be passed to SLF4J. This creates a cycle resulting in a stack overflow error.
Exactly how you fix the problem will depend on how you want your application to perform its logging, but you need to update your dependencies so that you have either org.slf4j:slf4j-jcl or org.springframework:spring-jcl on the classpath, and not both.

