2012-03-29 3 views
2

우리는 직장에서 토론과 흥미로운 포인트가있는 내 라이브러리를 내놓았다 : 자바 : 라이브러리 및 클래스 경로 문제

당신이 작은 도서관을 개발하는 말, somelib를 호출합니다. somelib은 일부 로깅을 수행해야하지만 바퀴를 재발 명하고 싶지 않으므로 타사 로깅 라이브러리를 사용하기로 결정했습니다.

또한 가능한 한 고통 somelib의 통합을 만들고 싶어, 그래서 당신은 다른 로깅 JAR을 가지고 하나의 JAR 파일 (somelib.jar)를, 배포, 그것을를 내부에 내장, logger.jar 를 호출 . Maven의 jar-with-dependencies 어셈블리가하는 것과 매우 비슷합니다.

이제 문제가 발생합니다. 귀하의 제품이 라이브러리이기 때문에 귀하의 고객이 somelib을 사용하고 있으며 동일한 로깅 라이브러리의 다른 버전을 독자적으로 사용하고 있다면 어떻게 될까요? 이제 클래스 패스 문제가 생겼습니다.

이것은 라이브러리를 작성하는 사람들에게 공통적 인 문제인 것처럼 보입니다. 그렇다면 일반적인 해결책은 무엇입니까?

  1. JAR 번들링 방법을 함께 사용하지 않습니까? 우리는 여전히 로깅 라이브러리의 사용자의 코드 기대 버전 X와 문제, 그리고 somelib의 코드 기대 버전 Y.가, 그렇게하더라도

  2. 그들은 어떻게 든 있도록 더미 패키지 접두어를 삽입 마십시오 로거 클래스 somelib은 충돌하지 않습니까?

  3. 로거 라이브러리의 동적로드는 어떻게됩니까? (여전히 버전 1에서 문제가 발생 함)

+1

고전적인 항아리 문제와 비슷합니다. –

답변

1

OSGI를 사용하거나 JDK 8 및 해당 Jigsaw 프로젝트를 기다리는 것이 좋습니다.