복붙노트

[SPRING] 요람 | 스프링 부트 의존성은 제외되지 않는다.

SPRING

요람 | 스프링 부트 의존성은 제외되지 않는다.

나는 log4j가 내가 작업하고있는 프로젝트에서 일하도록하고있다. build.gradle에 관련 log4j 종속성을 추가하고 작동 할 수 있도록 Spring 부트 스타터 로깅을 제외했습니다.

이 기능은 빌드 도구로 Maven을 사용할 때 잘 동작했지만 일단 Gradle로 전환하면 스프링 부트 스타터에서 로깅을 제외하고 전혀 작동하지 않습니다. 다음은 build.gradle 내 종속성입니다.

dependencies {
    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('org.springframework.boot:spring-boot-starter-web'){
        exclude module: 'org.springframework.boot:spring-boot-starter-logging'
    }
    compile('org.springframework.boot:spring-boot-starter-log4j')
    compile('org.springframework.boot:spring-boot-starter-data-rest')
    compile('org.springframework.boot:spring-boot-starter-actuator')
    compile('org.postgresql:postgresql:9.3-1101-jdbc41')
    compile('org.scala-lang:scala-library:2.10.4')
    testCompile('org.springframework.boot:spring-boot-starter-test') {
        exclude module: 'commons-logging'
    }
    providedCompile('org.springframework.boot:spring-boot-starter-tomcat')
}

그러나 의존성 트리에서 명확하게 볼 수 있듯이 spring-boot-starter-logging은 여전히 ​​존재합니다. 로깅이 작동하지 않는 이유가 무엇인지 추측합니다.

다음은 종속성 트리입니다.

+--- org.springframework.boot:spring-boot-starter-data-jpa: -> 1.2.1.RELEASE
|    +--- org.springframework.boot:spring-boot-starter:1.2.1.RELEASE
|    |    +--- org.springframework.boot:spring-boot:1.2.1.RELEASE
|    |    |    +--- org.springframework:spring-core:4.1.4.RELEASE
|    |    |    \--- org.springframework:spring-context:4.1.4.RELEASE
|    |    |         +--- org.springframework:spring-aop:4.1.4.RELEASE
|    |    |         |    +--- aopalliance:aopalliance:1.0
|    |    |         |    +--- org.springframework:spring-beans:4.1.4.RELEASE
|    |    |         |    |    \--- org.springframework:spring-core:4.1.4.RELEASE
|    |    |         |    \--- org.springframework:spring-core:4.1.4.RELEASE
|    |    |         +--- org.springframework:spring-beans:4.1.4.RELEASE (*)
|    |    |         +--- org.springframework:spring-core:4.1.4.RELEASE
|    |    |         \--- org.springframework:spring-expression:4.1.4.RELEASE
|    |    |              \--- org.springframework:spring-core:4.1.4.RELEASE
|    |    +--- org.springframework.boot:spring-boot-autoconfigure:1.2.1.RELEASE
|    |    |    \--- org.springframework.boot:spring-boot:1.2.1.RELEASE (*)
|    |    +--- org.springframework.boot:spring-boot-starter-logging:1.2.1.RELEASE

내 log4j.properties 파일은 다음과 같습니다.

log4j.rootLogger=INFO, fileout, CONSOLE
PID=????
LOG_PATTERN=[%d{yyyy-MM-dd HH:mm:ss.SSS}] log4j%X{context} - ${PID} %5p [%t] --- %c{1}: %m%n


# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=${LOG_PATTERN}

# Log4j configurations for with file appender
log4j.category.org.hibernate.validator.internal.util.Version=WARN
log4j.category.org.apache.coyote.http11.Http11NioProtocol=WARN
log4j.category.org.apache.tomcat.util.net.NioSelectorPool=WARN
log4j.category.org.apache.catalina.startup.DigesterFactory=ERROR

log4j.appender.fileout=org.apache.log4j.RollingFileAppender
log4j.appender.fileout.File=sampleLog.log
log4j.appender.fileout.MaxFileSize=1024KB
log4j.appender.fileout.MaxBackupIndex=1
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
log4j.appender.fileout.layout.conversionPattern=${LOG_PATTERN}

최신 정보

jar 파일 종속성을 배제하도록 수정했습니다. 그러나 로깅은 여전히 ​​작동하지 않습니다. log4j.properties는 클래스 아래의 WAR 배포에도 있습니다.

업데이트 02

문제는 My IDE (STS)

해결법

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

    1.모든 spring-boot-starter- * 프로젝트는 spring-boot-starter 프로젝트에 의존하며, 이는 spring-boot-starter-logging에 의존합니다. 구성 섹션에 다음 줄을 추가하여이 종속성을 제거 할 수있었습니다.

    모든 spring-boot-starter- * 프로젝트는 spring-boot-starter 프로젝트에 의존하며, 이는 spring-boot-starter-logging에 의존합니다. 구성 섹션에 다음 줄을 추가하여이 종속성을 제거 할 수있었습니다.

    configurations {
        compile.exclude module: 'spring-boot-starter-logging'
    }
    
  2. ==============================

    2.spring-boot-starter-web에서 spring-boot-startter-logging 모듈을 제외 시켰지만 dependency tree에서 명확하게 볼 수 있듯이 spring-boot-startter-data-jpa 모듈은 spring- boot-starter-logging을 사용하기 때문에 다른 모든 spring-boot-starter- * 종속성을 제외해야합니다 (모든 것이 spring-boot-starter-logging에 의존하기 때문에).

    spring-boot-starter-web에서 spring-boot-startter-logging 모듈을 제외 시켰지만 dependency tree에서 명확하게 볼 수 있듯이 spring-boot-startter-data-jpa 모듈은 spring- boot-starter-logging을 사용하기 때문에 다른 모든 spring-boot-starter- * 종속성을 제외해야합니다 (모든 것이 spring-boot-starter-logging에 의존하기 때문에).

  3. from https://stackoverflow.com/questions/28734647/gradle-spring-boot-dependencies-are-not-excluding by cc-by-sa and MIT license