ClassNotFoundException 에러 해결 방법(java.lang.ClassNotFoundException)


java

개발을 하다보면 가끔 ClassNotFoundException를 만날수 있는데 어떤 상황에서 ClassNotFoundException가 발생하는지 정리해보기로 하자.

1) ClassNotFoundException 원인

동적으로 클래스를 문자열로 로딩을 시도하다가 클래스가 없는 경우 발생.

  1. Class.forName( String className )

  2. ClassLoader.loadClass( String className ) 외에 String으로 클래스를 찾는 여러 메소드들…

크게 이 두가지 클래스를 사용하는 경우에 발생한다. 요즘에는 프레임워크나 라이브러리 사용으로 Class.forName을 많이 사용하지는 않겠지만 옛날에는 JDBC를 직접적으로 연결할 때 Class.forName으로 JDBC 라이브러리를 로드해서 많이 사용했던 생각이 난다. 

2) ClassNotFoundException 해결방법

당연히 실행환경에서 참조해야되는 jar 파일이나 class 파일이 없는 경우가 된다. jar 파일 혹은 참조하는 class 파일이 있는지 확인해보고 넣어주면 될 것 같다. 파일이 있더라도 실제 클래스패스에 들어갈수 있는 환경인지도 확인해보면 된다.

JDBC. Class.forName 관련 팁

뭐 … 오라클이라던지, MSSQL , MySQL 라이브러리들을 말이다. 하지만 JDBC 4.0 버전 이후로는 라이브러리 내에 META-INF-services-java.sql.Drvier 파일 내에 포함시켜둔 클래스들을 자동적으로 로드하게 되어있어 별도로 Class.forName과 같은 과정이 필요없다고 한다. 

이렇게 되면 데이터베이스에 종속되지 않은 설정을 할 수 있는 장점이 있긴 한데… 실제로 아직까지도 데이터베이스에 완전 독립적인 시스템을 구축하는 것은 거의 불가능에 가깝다. 물론 아주 간단한 프로그램들이 무슨 데이터베이스를 사용하든 표준적인 방법만 사용하도록 하여 종속적인 부분을 제외하고 ( jpa ) 만을 이용해서도 만들수 있겠지만… 진리의 케바케다. 

비슷한 NoClassDefFoundError 에러 해결 방법

 

java.lang.NoClassDefFoundError 에러 해결 방법

얼마 전 업무를 하다 java.lang.NoClassDefFoundError 를 만났는데 상당수 ClassNotFoundException와 헷갈리는 부분이 있을 것 같다. 과거에도 이 에러를 많이 만났지만 그때마다 어찌저찌 해결만 했을 뿐 명확히..

nhj12311.tistory.com



Written by@[namu]
모바일, 스마트폰, 금융, 재테크, 생활 정보 등