javac와 같은 도구를 사용하여 소스에서 번들을 생성하려면 선형 클래스 패스를 제공해야합니다. 안타깝게도 OSGi의 관점에서 볼 때 여전히 완벽하게 합법적 인 상황에서는 작동하지 않을 것입니다 :javac는 OSGi 번들을 빌드하기에 충분합니까?
포함 된 JAR에 종속됩니다.
동일한 패키지가 다른 종속성에 포함되어 있습니다.
javac는 OSGi 메타 데이터를 이해하지 못하기 때문에 클래스 패스의 종속성만으로는 할 수 없습니다. 좀 더 세밀한 패키지 방식이 필요합니다.
자동 프로세스 (연속 통합)에서 OSGi를 사용하는 사람들이이 문제를 어떻게 해결할 수 있습니까? 이상하게도 내부에 넣을 클래스/내부 JAR을 제공한다면 번들 JAR (메타 데이터 생성, JAR 생성)을 만드는 방법에 대한 웹 리소스가 많이 있지만 실제로 클래스를 컴파일하는 방법은 거의 없습니다.
예를 들어 봅시다. 내 번들에는 컴파일 할 두 개의 다른 번들이 필요합니다. 둘 다 Xerces를 임베디드 JAR로 포함하지만 두 가지 호환되지 않는 버전이 있습니다. 그것들 중 하나만 xerces 패키지를 내보내고 내 번들은 차례대로 가져 오기 때문에 문제가되지 않습니다. 매우 깨끗한 상황이 아닐지 모르지만, 문제없이 OSGi 컨테이너에서 "합법적으로"발생할 수있는 것이 있습니다.
이제 어떻게 컴파일 할 수 있습니까? 내 클래스 패스에 두 종속성을 넣을 수 없다. (임베디드 Xerces JAR은 javac에 의해 발견되지 않을 것이다.) 두 가지 버전의 Xerces가 충돌 할 것이고 내 보낸 것이 아닌 첫 번째 것이 될 수도있다. . ony 솔루션이 전체 번들 크기가 아닌 패키지 수준에서 "클래스 경로"를 만드는 것이면 javac를 전혀 사용할 수 없습니다.
은 어쩌면 내가 틀렸다,하지만은 OSGi (m2eclipse에 또는 펠릭스의 하나)에 대처하기 위해 만든 메이븐 플러그인은 여전히 피드에 그것을 선형 클래스 경로를주고, 결국 javac의에 의존하고 있습니다. – Chatanga