java - 如何在 play 2.1 RC2 中包含 native 库 (JNI)?

标签 java playframework playframework-2.0 tfs-sdk java.library.path

我正在使用 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/

相关文章:

java - 无法在 CloudBees 中正确部署 Play2 应用程序

java - 应用程序不兼容 Ice Cream Sandwich

java - Android 创建 xml 并将其写入文件

security - 无状态模式如何影响 Play! 中的安全性?框架?

java - Play Framework 2.0.4,Java : compound primary key declaration and assignment

java - 为什么 java.net.UnknownHostException 需要更改主机文件?

java - libgdx 多个平移事件

java - Hibernate 仅将新记录插入数据库

java - 如何在 play 2.0.1 中更改上传文件的目录?

playframework - 将 Jena 添加到 Play Framework 2.0