0

私はJavaとEclipseを初めて使用します。私のプロジェクトでは、ネイティブdllに依存するサードパーティのjarを使用しています。これらのdllをbinフォルダーの下に配置しましたが、これはeclipse内で正常に機能します。

「FatJarExporter」Eclipseプラグインを使用 して、プロジェクトを実行可能jarとしてエクスポートしました。JDK jarユーティリティを使用すると、このdllがjarのルートに存在していても、 jarがfatjarの外部のターゲットでjavafxdllを探していることに気付きました。

jarマニフェストを変更してjar内からこれらのdllを選択するようにするにはどうすればよいですか、またはEclipseからjarをエクスポートするときにパスを設定する必要があります。

glass.dllを追加しようとしました。Bundle-NativeCodeのprocessor=x86; osname = win32ですが、機能しませんでした。

マニフェストファイルは次のようになります。

Manifest-Version: 1.0
Created-By: Fat Jar Eclipse Plug-In
Main-Class: com.bosch.mvci.ui.UI

Name: com/sun/jna/
Implementation-Title: com.sun.jna
Implementation-Vendor: JNA Development Team
Implementation-Version: 3.4.1 (b671)
Specification-Title: Java Native Access (JNA)
Specification-Vendor: JNA Development Team
Specification-Version: 3
Bundle-ManifestVersion: 2
Bundle-Name: jna
Bundle-Description: JNA Library
Bundle-SymbolicName: com.sun.jna
Bundle-Version: 3
Bundle-RequiredExecutionEnvironment: J2SE-1.4
Bundle-Vendor: JNA Development Team
Bundle-ActivationPolicy: lazy
Export-Package: com.sun.jna,com.sun.jna.ptr,com.sun.jna.win32,javafx
Bundle-NativeCode: com/sun/jna/win32-x86/jnidispatch.dll; processor=x8
 6;osname=win32, com/sun/jna/win32-amd64/jnidispatch.dll; processor=x8
 6-64;osname=win32, com/sun/jna/w32ce-arm/jnidispatch.dll; processor=a
 rm;osname=wince,  com/sun/jna/sunos-x86/libjnidispatch.so; processor=
 x86;osname=sunos, com/sun/jna/sunos-amd64/libjnidispatch.so; processo
 r=x86-64;osname=sunos, com/sun/jna/sunos-sparc/libjnidispatch.so; pro
 cessor=sparc;osname=sunos, com/sun/jna/sunos-sparcv9/libjnidispatch.s
 o; processor=sparcv9;osname=sunos,  com/sun/jna/aix-ppc/libjnidispatc
 h.a; processor=ppc;osname=aix, com/sun/jna/aix-ppc64/libjnidispatch.a
 ; processor=ppc64;osname=aix,  com/sun/jna/linux-ppc/libjnidispatch.s
 o; processor=ppc;osname=linux, com/sun/jna/linux-ppc64/libjnidispatch
 .so; processor=ppc64;osname=linux, com/sun/jna/linux-i386/libjnidispa
 tch.so; processor=x86;osname=linux, com/sun/jna/linux-amd64/libjnidis
 patch.so; processor=x86-64;osname=linux, com/sun/jna/linux-arm/libjni
 dispatch.so; processor=arm;osname=linux, com/sun/jna/linux-ia64/libjn
 idispatch.so; processor=ia64;osname=linux,  com/sun/jna/openbsd-i386/
 libjnidispatch.so; processor=x86;osname=openbsd, com/sun/jna/freebsd-
 i386/libjnidispatch.so; processor=x86;osname=freebsd, com/sun/jna/fre
 ebsd-amd64/libjnidispatch.so; processor=x86-64;osname=freebsd,  com/s
 un/jna/darwin/libjnidispatch.jnilib; osname=macos,glass.dll; processo
 r=x86;osname=win32,javafx-font.dll; processor=x86;osname=win32,
4

1 に答える 1

0

これは実際には正しいです:

デフォルトでは、Windows は現在のユーザー ディレクトリで .dll を検索します (Java 用語では、これはuser.dirシステム プロパティです) 。

Java アプリが Jar 内から DLL をロードする方法はありません。Windowsが見える場所にコピーする必要があります(単純にuser.dirにコピーするだけでうまくいきます)

于 2013-01-11T23:36:02.323 に答える