2014-01-16 6 views
0

UrlClassLoaders에 대해 질문하고 싶습니다. 나는 잘 작동하는 메인 .jar 파일을 쓴다. 이제 플러그인 중 하나에서 플러그인을로드 할 수있게하려고합니다. 폴더 안에있는 .jar 파일을 찾고, 내부에 클래스 이름 (경로, 이름)을 나열 할 때까지 썼습니다. 내가 URLClassLoader를 물어 그래서ClassLoader 클래스 의존 (플러그인)

IN MAIN JAR: 
-class Expansion { ... } 

In a plugin jar: 
-class ExpansionA extends MainJar.Expansion { ... } 

: 나는 그들이 이런 내 주요 jar 파일에서 inherites 클래스를 찾을 수 없습니다 클래스를 찾을 수 (대한의 인스턴스를 만들 수)달라고 할 때 문제는 이 같은 MainJar에서 inherites 때문에 대신 MainJar의 플러그인 항아리에서 "확장"클래스를 검색합니다 "ExpansionA"클래스를 해결하고, 플러그인 항아리에는 "확장"클래스가 없습니다 리소스 라이브러리 ... defineClass 메서드 동안 NoDefFoundForClassError 예외를 throw합니다. MainJar의 강좌를 확인하라고 그에게 어떻게 말할 수 있습니까? (약 1 클래스뿐만 아니라 플러그인이 MainJar의 클래스를 상속 할 수 있기를 바랍니다.) 나를 도와 주실 수있으세요?

답변

0

ClassLoader에는로드 요청이 먼저 위임됩니다. 당신이 당신의 클래스 ExpansionClassLoaderClassLoader의 부모를 설정해야합니다 Expansion 작성중인 새 클래스 로더가 클래스에 액세스 할 수 있도록하려면

ClassLoader myLoader=newURLClassLoader(urls, Expansion.class.getClassLoader());

이뿐만 아니라 보장 않습니다 그 Expansion 클래스는 myLoader에 의해 발견되며, 부모 클래스가 먼저 요청한 것과 동일한 런타임 클래스로 해석됩니다. 플러그인 항아리에 클래스 복사본이 포함되어 있으면이 작업이 중요합니다.

+0

나는 그것을 이해한다! 나는 그것을 시도하고 작동합니다. 고맙습니다! –

관련 문제