본문 바로가기

Java

ClassNotFoundException ( 클래스 로더 정리 )

문제



TOP 구동이 안된다......

    java.lang.ClassNotFoundException: org.eclipse.osgi.compatibility.state.Activator

    at java.net.URLClassLoader.findClass(Unknown Source)



ClassNotFoundException이 뭔데?



  • Class.forName method

  • ClassLoader.findSystemClass method

  • ClassLoader.loadClass method


위와 같은 함수에서 클래스를 로딩할 때 예외가 발생하면 해당 에러를 던져줌. 즉 java class를 못찾거나 runtime에 

클래스를 로드할 수 없는 경우이다.



Class Loader가 뭔데?



[ Oracle Docs 해석 ]


 Class Loader 는 클래스 로딩을 책임지는 object이다. ClassLoader는 추상클래스이다. class의 binary 이름이 


주어지면, ClassLoader는 클래스 정의를 구성하는 데이터(변수, 함수 얘기하는건가? )를 생성하거나 배치시켜야 


한다. 전형적인 방법은 주어진 이름을 파일 이름으로 변경하고, 파일 시스템에서 해당 이름의 class file을 읽어 


오는 것이다.



모든 Class 객체는 자기 자신을 정의하고 있는 ClassLoader에 대한 참조를 포함하고 있다. - (1)


ClassLoader는 class와 resource를 찾기 위해 delegation(위임) 모델을 사용한다. 각각의 classLoader는 관련된 


부모 classLoader를 가지고 있다. class를 자기 자신이 찾기 전에 부모 classLoader에게 class 탐색을 위임한다.


가상머신에서 만들어지는 classLoader ( bootstrap class loader ) 는 부모 classLoader 가 없다. 


( JDK 1.1 부터 수정된 내용 ) - (2)





(1) Class.forName("FindMedian") 내부에 있는 class loader




(2) Bootstrap class loader는 자바 런타임 라이브러리에 있는 클래스를 로딩하는 역할을 맡고 있음 ( rt.jar )


자바에서 제공해주는 ClassLoader



1. java.net.URLClassLoader : 지정한 URL로부터 클래스를 로딩할 수 있게 해준다. 즉, 파일 시스템, HTTP, FTP를 


비롯한 모든 형태의 URL로부터 클래스를 로딩할 수 있다.


2. http://javacan.tistory.com/entry/2



'Java' 카테고리의 다른 글

#java.util.ConcurrentModificationException 이슈  (0) 2017.10.30
Memory leak 문제 해결  (0) 2017.09.18
export Jar  (0) 2017.08.21
Interface를 이용하여 Callback 구현하기  (0) 2017.06.03
close() 함수  (0) 2017.05.11