3

我正在使用Play Framework 2.1 RC2构建一个使用TFS Java SDK. TFS APIs需要包含一组本机 dll(例如native_auth.dll)。

如何在应用程序运行时使本机库可用?我在哪里可以指定要包含的本机 dll?

更新:我尝试使用staticblockSystem.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 start”命令运行您的应用程序,而不是“play run”。

“play run”命令在开发模式下启动您的应用程序,“play start”命令在生产模式下启动。我不知道它们之间的所有区别,但有一点很明显,

只有当我们使用“play start”时,才会为您的应用程序启动一个新的 JVM,并加载您由 System.load(...) 指定的本机库

如果您使用“play start”命令运行您的播放应用程序,它将起作用。不幸的是,“play run”不加载库。

于 2013-11-02T07:08:24.617 回答
1

使用时System.loadLibrary,我们唯一指定的是DLL我们想要的文件的名称。JVM 将在“Java 库路径”中搜索它。这是由java.library.path系统属性给出的路径(因此可以使用 -D 选项在 java.exe 命令行上进行更改)。它的默认值似乎与Windows路径有关,尽管它似乎有些混乱,我不太确定如何或为什么。换句话说,我不确定 Windows JVM 如何创建java.library.path.

因此,您应该-Djava.library.path=<path to your dlls>在运行应用程序时简单地指定。更多细节在这里

于 2013-01-16T14:07:39.287 回答