반응형
maven 으로 프로젝트 개발 후 배포 시 아래와 같은 오류가 나타날 경우가 있다.
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:./BOOT-INF/lib/log4j-slf4j-impl-2.11.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:./BOOT-INF/lib/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.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:51)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52)
Caused by: java.lang.StackOverflowError
at java.base/java.util.Spliterator.getExactSizeIfKnown(Spliterator.java:408)
at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:501)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:488)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:543)
at org.apache.logging.log4j.util.StackLocator.lambda$getCallerClass$3(StackLocator.java:49)
at java.base/java.lang.StackStreamFactory$StackFrameTraverser.consumeFrames(StackStreamFactory.java:534)
at java.base/java.lang.StackStreamFactory$AbstractStackWalker.doStackWalk(StackStreamFactory.java:306)
at java.base/java.lang.StackStreamFactory$AbstractStackWalker.callStackWalk(Native Method)
at java.base/java.lang.StackStreamFactory$AbstractStackWalker.beginStackWalk(StackStreamFactory.java:370)
at java.base/java.lang.StackStreamFactory$AbstractStackWalker.walk(StackStreamFactory.java:243)
at java.base/java.lang.StackWalker.walk(StackWalker.java:498)
중략...
이전 프로젝트에서는 나타나지 않았으나, log4j 버전을 올리면서 나타나기 시작했다.
Console 내용을 확인해보면 library 파일이 충돌이 일어난 것이다.
SLF4J: Found binding in [jar:file:./BOOT-INF/lib/log4j-slf4j-impl-2.11.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:./BOOT-INF/lib/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
maven 으로 library 를 추가하다보니 임의로 jar 파일을 추가하지 않았기에 충돌이 일어나는지 알 수 없었다.
그리고 이것이 중요한데, IDE Tool 에서는 오류가 나타나지 않는다는 것이다.
그래서 배포를 위해 Export 후 jar 파일 내에서 library jar 파일을 하나 제거해줘야했다.
log4j-slf4j-impl-2.11.2.jar
필자는 위 jar 파일을 제거하였다.
이후 정상적으로 작동을 확인하였다.
'Study > Java' 카테고리의 다른 글
[TEST] File Read Performance (파일 읽기 처리 속도) - 2 (0) | 2020.12.17 |
---|---|
[TEST] File Read Performance (파일 읽기 처리 속도) (0) | 2020.12.17 |
Http post(s) example (0) | 2020.12.09 |
Quartz Schduler Example (예제) (0) | 2016.07.22 |
이미지 돌리면서 배경 투명 이미지로 만들기 (0) | 2014.12.04 |