3

Play Framework 2.1 RC2利用するアプリケーションの構築に使用していますTFS Java SDKTFS APIsネイティブ dll のセット (例: native_auth.dll) を含める必要があります。

アプリケーションの実行中にネイティブ ライブラリを使用できるようにするにはどうすればよいですか? 含めるネイティブ dll はどこで指定できますか?

static更新:ブロックを試みSystem.load("full path")、 を使用してロードしまし app.classloader().loadClass("NativeUtils.class"); たが、それでも例外が発生します:

java.lang.UnsatisfiedLinkError: com.microsoft.tfs.jni.internal.platformmisc.NativePlatformMisc.nativeGetEnvironmentVariable(Ljava/lang/String;)Ljava/lang/String; at com.microsoft.tfs.jni.internal.platformmisc.NativePlatformMisc.nativeGetEnvironmentVariable(Native Method) at com.microsoft.tfs.jni.internal.platformmisc.NativePlatformMisc.getEnvironmentVariable(NativePlatformMisc.java:134) at com.microsoft.tfs.jni.PlatformMiscUtils.getEnvironmentVariable(PlatformMiscUtils.java:52) at com.microsoft.tfs.core.config.httpclient.DefaultHTTPClientFactory.shouldAcceptUntrustedCertificates(DefaultHTTPClientFactory.java:288) at com.microsoft.tfs.core.config.httpclient.DefaultHTTPClientFactory.configureClientParams(DefaultHTTPClientFactory.java:324) at com.microsoft.tfs.core.config.httpclient.DefaultHTTPClientFactory.newHTTPClient(DefaultHTTPClientFactory.java:137) at com.microsoft.tfs.core.TFSConnection.getHTTPClient(TFSConnection.java:1041) at com.microsoft.tfs.core.TFSConnection.getWebService(TFSConnection.java:874) at com.microsoft.tfs.core.config.client.DefaultClientFactory$9.newClient(DefaultClientFactory.java:265) at com.microsoft.tfs.core.config.client.DefaultClientFactory.newClient(DefaultClientFactory.java:90) at com.microsoft.tfs.core.TFSConnection.getClient(TFSConnection.java:1470) at com.microsoft.tfs.core.TFSTeamProjectCollection.getWorkItemClient(TFSTeamProjectCollection.java:370)

ご意見をお寄せいただきありがとうございます。

4

2 に答える 2

2

OpenCV ライブラリにも同じ問題がありました。ここで解決策を見つけました:http://answers.opencv.org/question/16689/jni-error-on-playframework-v211/

「play run」ではなく、「play start」コマンドでアプリケーションを実行する必要があります。

「play run」コマンドはアプリケーションを開発モードで起動し、「play start」コマンドはプロダクション モードで起動します。私はそれらの間のすべての違いを知っているわけではありませんが、1つの明らかなことは、

「play start」を使用した場合にのみ、アプリケーション用の新しい JVM が起動され、System.load(...) で指定したネイティブ ライブラリがロードされます。

「play start」コマンドでプレイアプリケーションを実行すると、動作します。残念ながら、「play run」はライブラリをロードしません。

于 2013-11-02T07:08:24.617 に答える
1

を使用する場合、指定するのは必要なファイルSystem.loadLibraryの名前だけです。DLLJVMは、「Javaライブラリパス」でそれを検索します。これは、java.library.pathシステムプロパティによって指定されるパスです(したがって、-Dオプションを使用してjava.exeコマンドラインで変更できます)。これのデフォルト値はWindowsパスに関連しているように見えますが、多少スクランブルされているように見えます。その方法や理由はよくわかりません。つまり、WindowsJVMがの初期値をどのように作成するのかわかりませんjava.library.path

したがって、アプリケーションを実行するときは、単に仕様を指定する必要があり-Djava.library.path=<path to your dlls>ます。詳細については、こちらをご覧ください。

于 2013-01-16T14:07:39.287 に答える