2010-04-25 3 views
2

javac와 같은 도구를 사용하여 소스에서 번들을 생성하려면 선형 클래스 패스를 제공해야합니다. 안타깝게도 OSGi의 관점에서 볼 때 여전히 완벽하게 합법적 인 상황에서는 작동하지 않을 것입니다 :javac는 OSGi 번들을 빌드하기에 충분합니까?

  • 포함 된 JAR에 종속됩니다.

  • 동일한 패키지가 다른 종속성에 포함되어 있습니다.

javac는 OSGi 메타 데이터를 이해하지 못하기 때문에 클래스 패스의 종속성만으로는 할 수 없습니다. 좀 더 세밀한 패키지 방식이 필요합니다.

자동 프로세스 (연속 통합)에서 OSGi를 사용하는 사람들이이 문제를 어떻게 해결할 수 있습니까? 이상하게도 내부에 넣을 클래스/내부 JAR을 제공한다면 번들 JAR (메타 데이터 생성, JAR 생성)을 만드는 방법에 대한 웹 리소스가 많이 있지만 실제로 클래스를 컴파일하는 방법은 거의 없습니다.

예를 들어 봅시다. 내 번들에는 컴파일 할 두 개의 다른 번들이 필요합니다. 둘 다 Xerces를 임베디드 JAR로 포함하지만 두 가지 호환되지 않는 버전이 있습니다. 그것들 중 하나만 xerces 패키지를 내보내고 내 번들은 차례대로 가져 오기 때문에 문제가되지 않습니다. 매우 깨끗한 상황이 아닐지 모르지만, 문제없이 OSGi 컨테이너에서 "합법적으로"발생할 수있는 것이 있습니다.

이제 어떻게 컴파일 할 수 있습니까? 내 클래스 패스에 두 종속성을 넣을 수 없다. (임베디드 Xerces JAR은 javac에 의해 발견되지 않을 것이다.) 두 가지 버전의 Xerces가 충돌 할 것이고 내 보낸 것이 아닌 첫 번째 것이 될 수도있다. . ony 솔루션이 전체 번들 크기가 아닌 패키지 수준에서 "클래스 경로"를 만드는 것이면 javac를 전혀 사용할 수 없습니다.

답변

0

Java 클래스는 javac에 의해 컴파일되며, 이는 다음을 의미합니다. 번들을 컴파일하려면 클래스 패스에 의존하는 모든 번들을 포함해야합니다. javac이 OSGi를 인식하지 못한다는 것이 옳습니다. 따라서 자동화를위한 다른 도구가 필요합니다.

이것이 어떻게 수행되는지 보려면 OSGi R4 서비스 플랫폼을 구현하는 Felix을 살펴보십시오.

OSGi 번들은 일식에서 지원되는 ant 또는 maven으로 포장됩니다. eclipse를 사용하여 종속성은 프로젝트 설정 탭의 "plugin-dependencies"에서 구성됩니다.

설정에 이클립스의 OSGi 프레임 프로젝트는 javac의이 클래스 파일에 모든 자바 파일을 빌드하는 데 필요한 Sherlog

0

얼마나 좋은 예. OSGI 번들은 다른 java 번들링 아카이브와 마찬가지로 JAR 파일 내에 몇 가지 필수 자체 설명 항목이있는 클래스 파일 및 매니페스트 모음입니다.

번들이 올바르게 작동하게하려면 모든 종속성이 충족되어야합니다. 서비스 나 수업 중 일부를 내보내려면 비슷한 방식으로 선언해야합니다. 개념을 이해하면 아카이브 내의 OSGI 고유 헤더가 의미가 있습니다.

+0

은 어쩌면 내가 틀렸다,하지만은 OSGi (m2eclipse에 또는 펠릭스의 하나)에 대처하기 위해 만든 메이븐 플러그인은 여전히 ​​피드에 그것을 선형 클래스 경로를주고, 결국 javac의에 의존하고 있습니다. – Chatanga

관련 문제