我正在使用 Play Framework 2.1 RC2
构建一个利用 TFS Java SDK
的应用程序。 TFS API
需要包含一组 native dll(例如 native_auth.dll
)。
如何在应用程序运行时使 native 库可用?我在哪里可以指定要包含的 native dll?
更新:
我尝试了 static
block 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;
在 com.microsoft.tfs.jni.internal.platformmisc.NativePlatformMisc.nativeGetEnvironmentVariable( native 方法)
在 com.microsoft.tfs.jni.internal.platformmisc.NativePlatformMisc.getEnvironmentVariable(NativePlatformMisc.java:134)
在 com.microsoft.tfs.jni.PlatformMiscUtils.getEnvironmentVariable(PlatformMiscUtils.java:52)
在 com.microsoft.tfs.core.config.httpclient.DefaultHTTPClientFactory.shouldAcceptUntrustedCertificates(DefaultHTTPClientFactory.java:288)
在 com.microsoft.tfs.core.config.httpclient.DefaultHTTPClientFactory.configureClientParams(DefaultHTTPClientFactory.java:324)
在 com.microsoft.tfs.core.config.httpclient.DefaultHTTPClientFactory.newHTTPClient(DefaultHTTPClientFactory.java:137)
在 com.microsoft.tfs.core.TFSConnection.getHTTPClient(TFSConnection.java:1041)
在 com.microsoft.tfs.core.TFSConnection.getWebService(TFSConnection.java:874)
在 com.microsoft.tfs.core.config.client.DefaultClientFactory$9.newClient(DefaultClientFactory.java:265)
在 com.microsoft.tfs.core.config.client.DefaultClientFactory.newClient(DefaultClientFactory.java:90)
在 com.microsoft.tfs.core.TFSConnection.getClient(TFSConnection.java:1470)
在 com.microsoft.tfs.core.TFSTeamProjectCollection.getWorkItemClient(TFSTeamProjectCollection.java:370)
提前感谢您的投入!
最佳答案
我在使用 OpenCV 库时遇到了同样的问题。我在这里找到了解决方案:http://answers.opencv.org/question/16689/jni-error-on-playframework-v211/
You MUST run your application with "play start" command, not "play run".
"play run" command starts your application in development mode and "play start" command starts in production mode. I don't know every difference between them but one obvious thing is ,
Only when we use "play start", a new JVM for you application is launched and it loads native libraries you specified by System.load(...)
如果您使用“play start”命令运行您的 play 应用程序,它将运行。不幸的是,“play run”不加载库。
关于java - 如何在 play 2.1 RC2 中包含 native 库 (JNI)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14360143/