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>
が、私はこの部分的な結果を得る:私もこれを試してみました?
のように表示されます。リンクを確認しました。 Windows用のdllファイルがありません。私はPOMファイルを更新しようとしましたが、エラーが発生しました。JARにネイティブライブラリが見つかりませんでした:/libsigar-amd64-linux.so。アドバイスをいただけますか? –
上記のディレクトリ名、src \ main \ resources \ libに基づいて、あなたのライブラリはバンドルのlibフォルダにありますか?バンドルのエントリ名とバンドルのマニフェストのBundle-NativeCodeヘッダの値を比較しましたか? –
私は部分的な進歩があり、投稿を見てください。 –