2013-10-19 3 views
0

OSGI 번들로 배포하는 방법을 이해하기 위해 며칠을 보냈는데 도움이 필요합니다. 나는 servicemix 4.5.2, maven 3.1.0 및 maven-bundle-plugin 2.4.0을 사용하고 있습니다. 나는OSGI 번들에 누락 된 요구 사항 패키지 - Felix & Servicemix

<Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>  
<Embed-Transitive>true</Embed-Transitive> 

내 번들 빌드 내가 ServiceMix에로 배포 할 때, 나는 BundleExceptions의 시리즈를 얻을 내 .pom에 다음 태그를 추가했습니다. 나는 벽에 부딪 칠 때까지 누락 된 패키지를 반복해서 pom에 추가한다. "누락 요구 사항 패키지 (package = com.ibm.ejs.ras)". 즉각적인 문제는 다운로드하거나 Maven 저장소에 ras.jar을 찾을 수 없다는 것입니다. 하지만 큰 문제는 수동으로 전이 의존성을 추적해야하는 결과를 초래하고 있다는 것입니다.

저는 스프링과 퓨즈의 사전 번들 버전을 사용하여 일반적인 문제를 해결했습니다. 퓨즈 저장소가 사라진 것처럼 보이고 스프링 하나가 태양처럼 보이고 필요한 모든 .jars가없는 것 같습니다. 나는 또 다른 게시물에서 보았던 bundleall.maven-bundle-plugin을 시도했다. 목표는 현재 더 이상 사용되지 않는다. 그 결과 "org.beanshell 프로젝트 용 OSGi 번들 생성 중 오류 발생 : bsh-core : aQute.bnd.osgi.Descriptors $ PackageRef는 java.lang.String으로 변환 할 수 없습니다"라는 결과가 발생했습니다.

저는 이전 (OSGI 이전) 버전의 servicemix와 낙타를 사용했으며 두 제품 모두에 대해 높은 평가를 받았습니다. 그러나 나는 OSGI 장애물을 극복하려고 노력하는 증기 (그리고 작업 시간)를 잃고 Mule은 점점 매력적으로 변하고있다. 누구나 통찰력이 있다면 크게 감사하겠습니다.

감사합니다.

내 치어 :

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 

<modelVersion>4.0.0</modelVersion> 

<parent> 
    <groupId>com.mycompany.abc</groupId> 
    <artifactId>core</artifactId> 
    <version>1.0-SNAPSHOT</version> 
</parent> 

<artifactId>myartifact</artifactId> 
<packaging>bundle</packaging> 
<name>myartifact</name> 

<dependencies> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>${slf4j.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-spring</artifactId> 
     <version>${camel.version}</version>   
    </dependency> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-mail</artifactId> 
     <version>${camel.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context-support</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-jdbc</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-dao</artifactId> 
     <version>2.0.8</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.commons</groupId> 
     <artifactId>commons-lang3</artifactId> 
     <version>3.0.1</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-dbcp</groupId> 
     <artifactId>commons-dbcp</artifactId> 
     <version>1.4</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.seleniumhq.selenium</groupId> 
     <artifactId>selenium-java</artifactId> 
     <version>2.35.0</version> 
    </dependency>   
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.felix</groupId> 
     <artifactId>maven-bundle-plugin</artifactId> 
     <version>2.4.0</version>  
     <extensions>true</extensions> 
     <configuration> 
      <instructions> 
      <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> 
      <Bundle-Description>${project.description}</Bundle-Description> 
      <Export-Package>com.mycompany.abc.myartifact</Export-Package> 
      <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>  
      <Embed-Transitive>true</Embed-Transitive> 
      </instructions> 
     </configuration> 
     </plugin> 
    </plugins>   
</build> 

+0

번들에 스프링 및 낙타 병을 넣을 필요가 없습니다. Karaf와 ServiceMix에는 Spring과 Camel 기능이 있습니다 (Spring 2.0.x에는 아닐지라도). 즉, 솔루션을 추가 할 것입니다. –

답변

0

com.ibm.ejs.ras 아마 당신이 번들 한 단지 중 하나에 대해 선택적 종속성입니다

당신은 당신의 수출입을 업데이트 할 것입니다. 잘못된 패키지를 걸러 내기위한 패키지. 또한

<Import-Package>!com.ibm.ejs.ras, *</Import-Package>. 

는 :

매입 종속성

후드 아래 번들 클래스 경로를 사용한다. 나는 이것을 할 수있게 해주는 도구의 제작자에게 연기 할 것입니다. http://www.aqute.biz/Bnd/FAQ#bundleclasspath

나는 90 %의 90 %에 해당하는 ServiceMix를 사용하고 있다는 것을 고려할 때 Embed-Dependency가 꼭 필요하지 않다는 것에 동의합니다. 어쨌든이 경우에 당신이 필요로하는 것. 나머지는 mvn : 또는 wrap : mvn : style-urls를 사용하여 ServiceMix 자체 내에서 설치할 수 있습니다. (dbcp 및 lang3 및 selenium 만 해당)

+0

감사합니다. 쉬나. – bottabing

관련 문제