2017-01-29 15 views
1

私はkarafの未解決のエラーに関する問題に遭遇しています。pom依存関係に含める適切なバンドルを見つけるためのプロセスは何ですか?

<Embed-Dependency>!org.osgi.core,*,</Embed-Dependency> 
<Embed-Transitive>true</Embed-Transitive> 

ほとんどすべてがbundle-classpathに入れられます。しかし、私はカラフに配備するといくつかのパッケージが見つからず、解決されていないことを発見しています。 いくつかの未解決のパッケージがある

を「提供」として、私はすべての依存関係を言及していない:

javax.wsdl.extensions私が何を考え出す行くにはどうすればよい

org.relaxng.datatype

これを解決するために私のポンドに含める依存関係ですか?

また、私は、推移を含むすべてのものをmavenのディレクティブとして埋め込んでも、これらはまだ解決されていないと表示されるのはなぜですか?
1.これらのパッケージが含まれているjarファイルがkarafで展開し、アクティブ状態にされていることを確認してください:

ありがとう

答えて

1

これは、デフォルトでは、複雑な問題があります。

  1. 欠落しているパッケージはJDKに含まれていますか?

    org.osgi.framework.system.packages = \ 
        javax.accessibility,\ 
        javax.activity,\ 
        javax.crypto,\ 
        javax.crypto.interfaces,\ 
        … 
        javax.wsdl.extensions,\ 
        org.xml.sax.helpers 
    

    それとも特別なフラグメントバンドルされ、システムの拡張バンドルとして定義することができます:それは多分ある場合は、コンテナの設定で不足しているパッケージを定義したOSGiコンテナに定義する必要があるため。 (Mavenのバンドルプラグインの例)

    <plugin> 
         <artifactId>maven-jar-plugin</artifactId> 
         <configuration> 
          <forceCreation>true</forceCreation> 
          <archive> 
           <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile> 
           <manifestEntries> 
            <Export-Package>com.sun.image.codec.jpeg</Export-Package> 
           </manifestEntries> 
          </archive> 
         </configuration> 
        </plugin> 
        <plugin> 
         <groupId>org.apache.felix</groupId> 
         <artifactId>maven-bundle-plugin</artifactId> 
         <executions> 
          <execution> 
           <id>bundle-manifest</id> 
           <phase>process-classes</phase> 
           <goals> 
            <goal>manifest</goal> 
           </goals> 
          </execution> 
         </executions> 
         <configuration> 
          <instructions> 
           <Fragment-Host>system.bundle; extension:=framework</Fragment-Host> 
          </instructions> 
         </configuration> 
        </plugin>  
    
  2. いくつかの他のシステムはすでにそれを使用するには、多分、バンドルもアップロードされています。例えば、ServiceMixはすでにバンドルとしてJARの多くを再パッケージ化しました。おそらくあなたはそれを見つけることができます。私はhttp://grepcode.com/でチェックしていますが、中央のアーティファクトがバンドルされているかどうかチェックしています。

  3. バンドルのバージョンが見つからない場合、それは手間のかかる部分です。クラスローダーのマジックやリフレクションがないので、OSGiバンドルとしての依存関係を再パッケージするためにmaven-shadeプラグインを使用することができます。

  4. ブートストラップには魔法がありますが、ダイナミックインポート、埋め込み依存、必須バントルなど、OSGi以外の方法でも問題が発生する可能性があります。中古。

推移従属性の埋め込みを推奨していません。どの輸入品が再請求され、どの輸入品がオプションであるかを決定するのではなく、たとえば、JUnitテストはJARに含まれていますが、必須ではありませんが、推移的埋め込みを使用している場合はJUnit全体が含まれます。例えば、パッケージ用のMavenバンドルプラグインのメイク命令のInstrad:

Import-Package: org.junit.*;resolution:=optional``` 

かそこら

Import-Pacage: !org.junit* 

あなたが可能な解決策の多くが提示されている参照し、その問題のための究極のソリューションが存在しないため、多くの要素があります。

関連する問題