복붙노트

[SPRING] Gradle의 Spring Boot에서 Tomcat 종속성 제외

SPRING

Gradle의 Spring Boot에서 Tomcat 종속성 제외

Jetty와 함께 Spring Boot를 사용하고 있으며 Gradle 빌드 파일에서 모든 Tomcat 종속성을 제외시킬 수없는 것 같습니다.

build.gradle의 관련 부분 :

compile("org.springframework.boot:spring-boot-starter") {
    exclude module: "tomcat-embed-el"
}
compile("org.springframework.boot:spring-boot-starter-jetty")

compile("org.springframework.boot:spring-boot-starter-web") {
    exclude module: "spring-boot-starter-tomcat"
}

그래도 gradle 의존성을 실행할 때 Tomcat의 일부가 여전히 존재하며 WebSockets에 문제가 발생합니다.

...
|    
+--- org.springframework.boot:spring-boot-starter-web: -> 1.4.1.RELEASE
|    +--- org.springframework.boot:spring-boot-starter:1.4.1.RELEASE (*)
|    +--- org.hibernate:hibernate-validator:5.2.4.Final
|    |    +--- javax.validation:validation-api:1.1.0.Final
|    |    +--- org.jboss.logging:jboss-logging:3.2.1.Final -> 3.3.0.Final
|    |    \--- com.fasterxml:classmate:1.1.0 -> 1.3.1
|    +--- com.fasterxml.jackson.core:jackson-databind:2.8.3
|    |    +--- com.fasterxml.jackson.core:jackson-annotations:2.8.0 -> 2.8.3
|    |    \--- com.fasterxml.jackson.core:jackson-core:2.8.3
|    +--- org.springframework:spring-web:4.3.3.RELEASE
|    |    +--- org.springframework:spring-aop:4.3.3.RELEASE (*)
|    |    +--- org.springframework:spring-beans:4.3.3.RELEASE (*)
|    |    +--- org.springframework:spring-context:4.3.3.RELEASE (*)
|    |    \--- org.springframework:spring-core:4.3.3.RELEASE
|    +--- org.springframework:spring-webmvc:4.3.3.RELEASE
|    |    +--- org.springframework:spring-aop:4.3.3.RELEASE (*)
|    |    +--- org.springframework:spring-beans:4.3.3.RELEASE (*)
|    |    +--- org.springframework:spring-context:4.3.3.RELEASE (*)
|    |    +--- org.springframework:spring-core:4.3.3.RELEASE
|    |    +--- org.springframework:spring-expression:4.3.3.RELEASE (*)
|    |    \--- org.springframework:spring-web:4.3.3.RELEASE (*)
|    \--- org.springframework.boot:spring-boot-starter-tomcat:1.4.1.RELEASE
|         +--- org.apache.tomcat.embed:tomcat-embed-core:8.5.5
|         +--- org.apache.tomcat.embed:tomcat-embed-el:8.5.5
|         \--- org.apache.tomcat.embed:tomcat-embed-websocket:8.5.5
|              \--- org.apache.tomcat.embed:tomcat-embed-core:8.5.5
...

spring-boot-starter-tomcat이 spring-boot-starter-web에서 제외되지 않은 이유는 무엇입니까?

해결법

  1. ==============================

    1.아하, 그 이유를 찾았습니다.

    아하, 그 이유를 찾았습니다.

    또한 spring-boot-starter-tomcat에 의존하는 compile ( "org.springframework.boot : spring-boot-starter-websocket") 의존성을 가졌습니다. Gradle 종속성 출력은 spring-boot-starter-web이 Tomcat이 여전히 존재하는 이유라고 생각하게합니다.

    다음을 추가해야했습니다.

    compile("org.springframework.boot:spring-boot-starter-websocket") {
        exclude module: "spring-boot-starter-tomcat"
    }
    

    배운 점은 무언가를 제외하고 싶을 때 모든 종속성을 다시 확인하여 모든 장소에서 제외되었는지 확인하십시오. 그리고 gradle 의존성 출력이 향상되어 오해의 소지가 줄어 듭니다 ...

  2. ==============================

    2.나는 같은 문제가 있었으므로 spring-boot-starter-tomcat을 제외하고 tomcat-embed- * jar도 제외해야했으며 gradle 구성을 통해이 작업을 수행했습니다.

    나는 같은 문제가 있었으므로 spring-boot-starter-tomcat을 제외하고 tomcat-embed- * jar도 제외해야했으며 gradle 구성을 통해이 작업을 수행했습니다.

    configurations {
      compile.exclude module: 'spring-boot-starter-tomcat'
      compile.exclude group: 'org.apache.tomcat'
    }
    
  3. from https://stackoverflow.com/questions/42275516/excluding-tomcat-dependencies-from-spring-boot-in-gradle by cc-by-sa and MIT license