2012-07-26 1 views
1

일부 애플리케이션 용 플러그인을 작성 중입니다. libA-1.0과 나의 플러그인의 Application hava library dependency가 libA-2.0의 비슷한 의존성을 가지고 있다고 가정합시다. 버전이 다르며 서로 호환되지 않습니다 (즉, 서로 다른 API 메소드 서명이 있음).항아리에서 클래스를로드하는 것을 방지하는 방법

내 플러그인이 libA-1.0 (또는 libA.2.0의 클래스 사용을 강제하는 방법)에서 클래스를로드하는 것을 방지하려면 어떻게해야합니까?

사용자 정의 클래스 로더를 작성하지 않고 forName, loadClassDefinition 호출을 사용하지 않는 방법이 있습니까?

일부 라이브러리를 * .war 아카이브에 넣을 때 비슷한 문제가 발생하며 웹 컨테이너에 클래스 경로에 "동일한"라이브러리가 있으므로로드되지 않습니다.

어떤 도움이든 타크 스.

감사합니다, 파블

+0

클래스 로더없이 이것을 수행 할 수 있는지 알고 싶다. , 나는 그렇지 않다고 제안 할 것이다. – MadProgrammer

답변

0

OSGI는 상자에서이 기능을 제공합니다. 유사한 기능을 제공하는 다른 플러그인 프레임 워크가 있다고 확신합니다.

다른 병에서 클래스를로드하는 기능을 많이 제공 할 수 있어야하는 URLClassLoader이 있습니다. 작업을 수행하고있는 스레드의 클래스 로더를 변경하려면 약간의 노력을 기울여야합니다. 예제가 없다면 구체적인 예가 필요하다면 하나를 써야만한다. (검색 엔진으로 찾을 수 없다면)

+0

클래스 로더를 언제 어떻게 변경할 수 있습니까? 내 플러그인이 MyPlugin 클래스에 entryPoint() 메소드를 가지고 있고이 메소드가 앞서 언급 한 애플리케이션에 의해 호출된다고 가정합니다. 런타임에서 entryPoint() 메소드를 실행하기 시작하면 클래스 MyPlugin은 일부 클래스 로더에 의한 것입니다. Thread.getCurrentThread(). setContextClassloader()에서 클래스 로더를 내 사용자 정의 UrlClassLoader로 변경하면이 작업이 가능합니까? 왜/왜 그래? 설명을 환영합니다 :) –