2016-07-18 15 views
1

.soファイルと.dllファイルをOSGIバンドルに埋め込みたいと思います。私は私が手OSGiフレームワークにバンドルを実行するとOSGIバンドルにSIGAR .soと.dllファイルを埋め込む

 <dependency> 
      <groupId>org.hyperic</groupId> 
      <artifactId>sigar</artifactId> 
      <version>1.6.5.132-6</version> 
      <type>jar</type> 
     </dependency> 

のpom.xml

<plugin> 
    <groupId>org.apache.felix</groupId> 
    <artifactId>maven-bundle-plugin</artifactId> 
    <version>3.0.0</version> 
    <extensions>true</extensions> 
    <configuration> 
     <instructions> 
      <Embed-Dependency>sigar;scope=compile|runtime</Embed-Dependency> 
      <Embed-Dependency>sigar;scope=compile|runtime</Embed-Dependency> 
          <Include-Resource> 
           ${basedir}/src/main/resources/lib/libsigar-amd64-linux.so, 
           ${basedir}/src/main/resources/lib/libsigar-x86-linux.so, 
           ${basedir}/src/main/resources/lib/libsigar-amd64-solaris.so, 
           ${basedir}/src/main/resources/lib/libsigar-universal64-macosx.dylib, 
           ${basedir}/src/main/resources/lib/sigar-amd64-winnt.dll 
          </Include-Resource> 
          <Bundle-NativeCode> 
           /libsigar-amd64-linux.so; 
           processor=x86_64; osname=Linux, 
           /libsigar-x86-linux.so; 
           processor=x86; 
           osname=Linux, 
           /libsigar-amd64-solaris.so; 
           processor=x86_64; osname=Solaris, 
           /libsigar-universal64-macosx.dylib; 
           osname=macosx; processor=x86; 
           processor=x86_64, 
           /sigar-amd64-winnt.dll; 
           processor=x86_64; osname=Windows 
          </Bundle-NativeCode> 
      <Bundle-Activator>org.test.Activator</Bundle-Activator> 
      <Bundle-Version>${project.version}</Bundle-Version> 
      <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> 
     </instructions> 
    </configuration> 
</plugin> 

バン:私はこの依存関係を追加した私はsrc\main\resources\libその後

にすべてのファイルをコピーし :私はこれを試してみました:

no sigar-amd64-winnt.dll in java.library.path 
org.hyperic.sigar.SigarException: no sigar-amd64-winnt.dll in java.library.path 
     at org.hyperic.sigar.Sigar.loadLibrary(Sigar.java:172) 

私はそれらをどのように埋め込むことができますか?

更新:

org.osgi.framework.BundleException: Unable to resolve io.lambdacube.osgi.sigar [31](R 31.0): missing requirement [io.lambdacube.osgi.sigar [31](R 31.0)] osgi.native; (|(&(osgi.native.osname~=linux)(osgi.native.processor~=x86_64))(&(osgi.native.osname~=linux)(osgi.native.processor~=x86))(&(osgi.native.osname~=solaris)(osgi.native.processor~=x86_64))(&(osgi.native.osname~=macosx)(|(osgi.native.processor~=x86)(osgi.native.processor~=x86_64)))) Unresolved requirements: [[io.lambdacube.osgi.sigar [31](R 31.0)] osgi.native; (|(&(osgi.native.osname~=linux)(osgi.native.processor~=x86_64))(&(osgi.native.osname~=linux)(osgi.native.processor~=x86))(&(osgi.native.osname~=solaris)(osgi.native.processor~=x86_64))(&(osgi.native.osname~=macosx)(|(osgi.native.processor~=x86)(osgi.native.processor~=x86_64))))] 
    at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4111)[org.apache.felix.framework-5.4.0.jar:] 
    at org.apache.felix.framework.Felix.startBundle(Felix.java:2117)[org.apache.felix.framework-5.4.0.jar:] 
    at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)[org.apache.felix.framework-5.4.0.jar:] 

解決のための任意のアイデア:

<plugin> 
    <groupId>org.apache.felix</groupId> 
    <artifactId>maven-bundle-plugin</artifactId> 
    <version>3.0.0</version> 
    <extensions>true</extensions> 
    <configuration> 
     <instructions> 
      <Embed-Dependency>sigar;scope=compile|runtime</Embed-Dependency> 
      <Include-Resource> 
       ${maven-resources}, 
       lib=src\main\resources\lib 
      </Include-Resource> 
      <Bundle-NativeCode> 
       lib/sigar-amd64-winnt.dll; 
       processor=x86_64; osname=win32 
      </Bundle-NativeCode> 
      <Import-Package> 
       org.osgi.framework;version="[1.7,2)", 
       org.osgi.util.tracker;version="[1.5,2)" 
      </Import-Package> 
      <Bundle-Activator>org.test.Activator</Bundle-Activator> 
      <Bundle-Version>${project.version}</Bundle-Version> 
      <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> 
     </instructions> 
    </configuration> 
</plugin> 

が、私はこの部分的な結果を得る:私もこれを試してみました

答えて

2

バンドル内のネイティブライブラリをマップするには、ヘッダBundle-NativeCodeを使用する必要があります。

さらに、osgiバンドルとしてパッケージ化されたsigarプロジェクトも既に存在します。たとえば、this oneまたはhere

+0

のように表示されます。リンクを確認しました。 Windows用のdllファイルがありません。私はPOMファイルを更新しようとしましたが、エラーが発生しました。JARにネイティブライブラリが見つかりませんでした:/libsigar-amd64-linux.so。アドバイスをいただけますか? –

+0

上記のディレクトリ名、src \ main \ resources \ libに基づいて、あなたのライブラリはバンドルのlibフォルダにありますか?バンドルのエントリ名とバンドルのマニフェストのBundle-NativeCodeヘッダの値を比較しましたか? –

+0

私は部分的な進歩があり、投稿を見てください。 –

関連する問題