2012-11-30 3 views
0

이 질문은 게시 된 질문과 비슷하지만 조금 다릅니다.OSGi Karaf가 종속성을 해결할 수 없음

내가 구글 구아바를 사용하고 받는다는 설치할 때 받는다는가 좋은 작품을 설치 pom.xml 파일에 다음을 표시하고 때 다음과 같은 오류를

Error executing command: Could not start bundle mvn:com.mycompany.webservices/dto/1.0.0 in feature(s) WebServicesGateway-0.0.0: Unresolved constraint in bundle 
com.mycompany.webservices.dto [224]: Unable to resolve 224.0: missing requirement [224.0] osgi.wiring.package; (&(osgi.wiring.package=com.google.common.base)(version>=13.0.0)(!(version>=14.0.0 
))) 

을 제공합니다.

<Import-Package>!com.google.common.base, 

그러나 이것은 런타임 중에 classDEFNotFound 예외를 발생시킵니다.

java.lang.NoClassDefFoundError: com/google/common/base/Objects 

나는 12.0, 11.0 및 10.0로 제한하는 것을 시도했다

<Import-Package>com.google.common.base;version="[13.0,13.0]", 

버전 번호를 제한하기 위해 수입 버전을 퍼팅 시도했지만 오류가 동일하게 유지됩니다.

maven .m2 저장소를 확인했는데 jar 파일이 잘 보입니다.

제안 사항?

+0

guava-jar 파일의 매니페스트에 내 보낸 버전이 맞습니까? 카라프가 구아바 번들을 해결 된 것으로 표시합니까? –

답변

3

여러분의 osgi 환경에 guava 라이브러리를 넣어야합니다. osgi 환경은 번들에 필요한 패키지를 내 보냅니다. Guava-jar의 현재 버전 (13)은 osgi 준비 상태가됩니다. 그냥 카라프의 배포 폴더에 그 항아리를 드롭하고 당신은 잘되어야합니다.

솔루션 시연 : 대부분의 경우에 Import-Package 속성을 직접 설정하지 않아도됩니다. maven 번들 플러그인이이 문제를 해결합니다. 묶음의 매니페스트에 com.google.guava과 같은 가져 오기 패키지가 표시되면 번들의 패키지를 실제로 사용한다는 의미이므로 수동으로 제외하면 문제가 해결되지 않습니다. 실제로 OSGi는 ClassNotFoundException에서 사용자를 보호하기 위해 번들을 시작하기 전에 가져 오기를 해결해야하므로 import-package 속성을 설정하여 해당 보호 메커니즘을 악용했습니다.

+0

벤자민, 고맙습니다. 병이 .m2 인 경우 사실 내 논리에 위배됩니다. 왜 보이지 않아야합니까? 당신이 제공 한 솔루션이 완벽하게 작동합니다. 나는 그것을 사용하기 위해 번들을 배포해야한다. 우리 프로젝트에서 우리는 배포 폴더를 사용하지 않으므로 다음과 같은 기능을 추가했다. mvn : com.google.guava/guava/13.0 ----- 또는 다음과 같이 배포를 번들로 사용할 수 있습니다. ---- osgi : mvn : com.google.guava/guava/13.0을 설치하십시오. 카라프 콘솔. –

+1

m2로 제공한다고해서 Karaf가 해결할 수있는 것은 아닙니다. 응용 프로그램에 종속성이있는 경우 Karaf에 제공해야합니다. Karaf는 전이 의존성을 자동으로 설치하지 않습니다. 이 기능을 사용하려면 OBR을 통해 응용 프로그램을 설치해야합니다. 이 기사에서는 모든 종속성을 수집하여 한 번에 모두 설치할 수있는 방법으로 기능 파일을 사용하는 것이 좋습니다. –

+0

좋은 점 Achim은 OBR이 당신이 설정했다면 의존성을 해결하는 데 확실히 유용합니다. Google 구아바 도서관의 경우에는 더 이상 의존성이 없습니다. – benjamin

관련 문제