Servlet + JSP 를 사용하여 게시판을 만들던 중에
java.lang.NoClassDefFoundError: Could not initialize class 오류가 발생하여 이를 해결 한 과정을 적습니다.
Apache tomcat 8.5.34 버전
Hikaricp 3.3.0버전 사용
서버를 돌리면 java.lang.NoClassDefFoundError: Could not initialize class 오류가 발생.
Intellij 콘솔에서
Failed to load class "org.slf4j.impl.StaticLoggerBinder".
오류가 발생하는 것을 발견
pom.xml에 다음을 추가
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
해결이 되나 싶었는데 여전히
java.lang.NoClassDefFoundError: Could not initialize class 오류 발생
다시 Intellij 콘솔 창 확인하니
log4j:WARN Please initialize the log4j system properly.
위와 같은 에러가 발생
pom.xml에 다음을 추가
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.11.1</version>
</dependency>
그 이후에 실행하니 정상적으로 실행이 된다.
그런데 콘솔창을 확인 하니
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/count/IdeaProjects/hierarchicalboard/target/hierarchicalboard/WEB-INF/lib/log4j-slf4j-impl-2.11.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/count/IdeaProjects/hierarchicalboard/target/hierarchicalboard/WEB-INF/lib/slf4j-log4j12-1.7.5.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]
ERROR StatusLogger No Log4j 2 configuration file found. Using default configuration (logging only errors to the console), or user programmatically provided configurations. Set system property 'log4j2.debug' to show Log4j 2 internal initialization logging. See https://logging.apache.org/log4j/2.x/manual/configuration.html for instructions on how to configure Log4j 2
다음과 같은 오류 메세지가 나온다.
정상적으로 실행은 되는데 중복되는 SLF4 바인딩이 존재한다고 한다.
그런데 위에 추가한 dependency중 하나라도 빠지니
java.lang.NoClassDefFoundError: Could not initialize class 이 에러가 계속 난다.
조금 더 검색 해봐야 할듯...?
-----
추가내용
해당 에러는 실제로 어떤 파일이 빠지거나 해서 발생하는 에러가 아닐수도 있습니다.
만약 해당 에러가 발생한다면 static initializer부분에 try catch를 사용하여 정확히 무슨 에러가 발생하는지 확인해보는게 좋을 것 같습니다.
에러 메시지를 보고 현재 개발 환경 버전과 다른 버전의 파일이 읽힌다면 아마 그것때문에 해당 에러가 발생했을 가능성이 높습니다.
그 외에 dependency 역시 다시 잘 확인해보시기를 추천 드립니다.
dependency에서도 서로 버전이 꼬이거나 하는 경우가 자주 발생합니다.
한가지 예를들자면
A라는 기능은 B가 5.4.5 버전 이상일때만 사용 가능한데, 현재 사용중인 B의 버전이 5.3.5라면 A라는 기능을 사용하려 할 때 dependency가 꼬여버려 에러가 발생할 수도 있습니다.
위와 같은 이유 외에도 다른 이유로 의존성이 꼬일 수 있습니다.
'Java 웹 프로그래밍' 카테고리의 다른 글
객체지향 프로그래밍이란? (0) | 2019.03.07 |
---|---|
Windows 7이상에서 Docker Toolbox 사용시 https://localhost:4000으로 접속 불가 해결 (0) | 2019.02.21 |
JDBC MySQL 5.1.23 이상 사용시 time zone 관련 에러 발생 시 해결 방법 (2) | 2019.01.12 |
forward redirect (0) | 2019.01.10 |
쿠키, 세션 (0) | 2019.01.10 |