2012-01-05 4 views
1

osgi 번들을 작성했습니다. 여기에는 다음과 같이 서비스 제공자가 포함 된 jar (bsf-all.jar)에 대한 종속성이 있습니다 (META_inf/services/아래). 내가 OSGI 콘솔을 통해 내 번들의 상태를 검사 할 때서비스 제공자 및 OSGI 문제

bsh.engine.BshScriptEngineFactory 
com.sun.script.freemarker.FreeMarkerScriptEngineFactory 
com.sun.script.groovy.GroovyScriptEngineFactory 
com.sun.script.jacl.JaclScriptEngineFactory 
com.sun.script.jaskell.JaskellScriptEngineFactory 
com.sun.script.java.JavaScriptEngineFactory 
com.sun.phobos.script.javascript.RhinoScriptEngineFactory 
com.sun.phobos.script.javascript.EmbeddedRhinoScriptEngineFactory 
com.sun.script.jawk.JawkScriptEngineFactory 
com.sun.script.jelly.JellyScriptEngineFactory 
com.sun.script.jep.JepScriptEngineFactory 
com.sun.script.jexl.JexlScriptEngineFactory 
com.sun.script.jruby.JRubyScriptEngineFactory 
com.sun.script.judo.JudoScriptEngineFactory 
com.sun.script.juel.JuelScriptEngineFactory 
com.sun.script.jython.JythonScriptEngineFactory 
com.sun.script.ognl.OgnlScriptEngineFactory 
org.pnuts.scriptapi.PnutsScriptEngineFactory 
com.sun.script.scheme.SchemeScriptEngineFactory 
com.sun.script.velocity.VelocityScriptEngineFactory 
com.sun.script.xpath.XPathScriptEngineFactory 
com.sun.script.xslt.XSLTScriptEngineFactory 

, " 서버 발생이 활성화되고 더 종속성 문제 .. 가 없다하지만 난 그것을 사용하려고하면 (서버 및 실행 후 의미) 클래스를 찾을 수 없음 "문제;

java.lang.ClassNotFoundException: com.sun.phobos.script.javascript.RhinoScriptEngineFactory 

이 특정 클래스 내 종속 항아리 (BSF-all.jar)에 그 클래스는 .. 서비스 제공 업체를 통해 내가은 OSGi와 자바 서비스 제공 업체와 클래스 로딩 문제가 의심 을 노출 ..

내 pom.xml은 다음과 같습니다.

<dependencies> 
     <dependency> 
      <groupId>org.apache.bsf</groupId> 
      <artifactId>bsf-all</artifactId> 
      <version>${bsf.version}</version> 
      <optional>true</optional> 
     </dependency> 
    <dependency> 
      <groupId>rhino</groupId> 
      <artifactId>js</artifactId> 
      <version>1.6R7</version> 
      <optional>true</optional> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.felix</groupId> 
       <artifactId>maven-bundle-plugin</artifactId> 

       <extensions>true</extensions> 
       <configuration> 
        <instructions> 
         <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> 
         <Bundle-Name>${project.artifactId}</Bundle-Name> 
         <Export-Package> 
          org.apache.bsf.*, 
          org.mozilla.javascript.*, 
          org.pnuts.scriptapi.*, 
          com.sun.script.*, 
          com.sun.phobos.script.*, 
          bsh.engine.*, 
          javax.script.*, 
         </Export-Package> 
         <Import-Package> 
          com.sun.*       
         </Import-Package> 
      <DynamicImport-Package>*</DynamicImport-Package> 
      <Embed-Dependency>js;scope=compile|runtime;inline=false;</Embed-Dependency> 
        </instructions> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

나는 Equinox OSGi 구현을 사용하고 있습니다. 어떻게 위의 문제를 극복하기 위해 POM을 편집 할 수 있습니까?

+0

은 bsf-all.jar OSGi 번들 (의미 : META-INF/MANIFEST.MF 파일을 가짐)입니까? – thobens

+1

서비스 제공 업체는 OSGi에서 작동하지 않지만 스크립트 엔진을 수동으로 설정하여 스크립트 엔진을 사용할 수 있습니다. ScriptEngineFactory.registerEngineName (String name) - 한 번에 의존성 작업을 시도하는 것이 좋습니다. 또한 모든 것을 임베드하는 대신 개별 Jar로 래핑 해보십시오 (즉, 각 개별 종속성을 번들로 바꾸려면 pax-wrap을 참조하십시오). – earcam

+0

"서비스 제공 업체가 OSGi에서 작동하지 않지만 수동으로 ScriptEngineFactory.registerEngineName (문자열 이름)을 설정하여 이러한 스크립트 엔진을 사용할 수 있습니다.".. 수동으로 등록하는 것이 좋습니다 ... – Ratha

답변

4

이 POM에는 CNFE의 원인에 대해 추측하기 시작하는 데 너무 많은 근본적인 오류가 있다고 생각합니다. <Export-Package> 성명이 가장 중요합니다. 왜 당신은 재 포장하고 BSF, Rhino, Phobos 전체 및 번들 내부의 JDK 부분까지 내보낼 수 있습니까?

이전 질문에 대한 대답에서 암시 하듯이 : 높은 수준에서 달성하려는 내용을 잘 이해하지 않고도 낮은 수준의 세부 사항으로 인해 수렁에 빠지고 있습니다. 따라서 누군가가이 특정 문제를 해결할 수있는 답변을 게시하더라도 여전히 작동하는 아키텍처가 없습니다.

달성하려는 목표와 이유를 단계별로 설명하십시오. 그런 다음 훌륭한 OSGi 프랙티스를 기반으로 솔루션을 제공 할 수 있습니다.

+0

제가 이해 했으므로; "Export-Package> 명령은 번들이 내보낼 패키지 목록입니다."내 경우 내 보낸 패키지는 내 백엔드에서 필요합니다. (내 보낸 패키지는 종속 항아리에 정의되어 있습니다 (예 : bsf -all.jar). 그래서, 명시 적으로 export하려고합니다. 다른 번들에 의해 액세스하려고합니다. 그게 잘못된가요? – Ratha