2017-03-28 15 views
1

OSGi 프로젝트의 의존성에 대처하는 방법과 그것들을 번들로 변환하는 방법을 보여주는 튜토리얼이 많이 있습니다. 1 일 이상 조사한 후에도 provided 범위의 종속성을 처리하는 방법을 찾지 못했습니다.OSGi의 "제공된"범위를 가진 의존성을 다루는 방법

예를 들어 설명해 드리겠습니다. 현재 Dropbox (dropbox-core-sdk 3.0)을 사용 중이고 provided 범위의 두 가지 종속성 (com.google.androidjavax.servlet)이 있습니다. maven-bundle-plugin 또는 bnd과 같은 기술을 사용하면 아티팩트 및 전 이적 종속성 만 다운로드합니다. 그러나 OSGi 컨테이너로 프로젝트를 가져 오려면 종속성을 제공해야합니다. 같은 내가 maven-bundle-pluginpom.xml을 사용하고

보이는 :

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <extensions>true</extensions> 
      <configuration> 
       <instructions> 
        <Bundle-SymbolicName>${project.artifactId};singleton:=true</Bundle-SymbolicName> 
        <Bundle-Version>${project.version}</Bundle-Version> 
        <Export-Package>*</Export-Package> 
        <Embed-Transitive>true</Embed-Transitive> 
        <Embed-Dependency>*</Embed-Dependency> 
       </instructions> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

Embed-Dependency 경우 모든 것을 포함 말합니다 만 종속 + 이적 종속성 항아리에 있습니다. 그러나 제공된 범위의 항아리가 항아리에도 있어야합니다.

provided 범위의 종속성을 다운로드 할 수있는 방법이 있습니까? 그렇지 않다면이 상황을 어떻게 처리할까요?

답변

1

,하지만 난 당신이 메이븐을 통해 의존성을 구축 제공을 포함 할 수 있다고 생각하지 않습니다

이 옵션을 사용해보십시오. 번들 이외의 Android 구성 요소를 사용하는 것은 거의 불가능하므로 필요한 Jar를 수동으로 다운로드하여 번들 (번들 클래스 패스)에 배치 할 수는 없습니까?

+1

David에게 답변 해 주셔서 감사합니다. 나는 방대한 양의 라이브러리와 모든 것에 대한 의존성 때문에 osgi로 시작하는 dropbox와 같은 매우 나쁜 api를 선택했다. 이러한 의존성을 모두 손으로 처리하는 것은 거의 불가능합니다. 그래서 저는 프로세스를 자동화하고 싶었습니다. –

+0

필요한 항아리를 수동으로 다운로드하여 내 번들에 배치했지만 Android에도 수천 가지 종속성이 있습니다 (추이 + 제공됨). 나는 실제로 붙어 있고 더 멀리가는 방법을 모른다. –

+0

Maven BND 전문가가 해결책을 게시 할 수 있습니다. 또 다른 접근법으로 Dropbox 프로젝트를 별도의 Java 프로세스로 실행하고 MQTT 또는 REST를 통해 Kura와 통신 할 수 있습니다. 이 접근 방식은 OSGi 아키텍처에 맞지 않는 애플리케이션에 사용되는 것으로 나타났습니다. –

0

임베드 할 종속성의 범위를 지정할 수 있다고 생각합니다. OSGi 스펙 항아리와 같은 일부 종속성은 절대로 배포해서는 안되지만 조심하십시오.

일반적으로 번들 내에 숨어있는 종속성 만 포함시킬 수 있습니다. 다른 번들과 통신하는 데 필요한 패키지는 배포하지 않는 것이 좋습니다.

예를 들어 서블릿 api는 일반적으로 사용하는 httpservice 번들에 의해 제공됩니다. 내가 거기 밖으로 메이븐 BND 전문가로 연기해야 ​​

<Embed-Dependency>*;scope=compile|provided</Embed-Dependency>

+0

감사합니다. 기독교인입니다. 나는 대답을 편집했습니다. Maven의 설정에서 나는 이미 모든 의존성을 포함 할 필요가 있다고 말했다. –