我有 Springboot maven 项目来开发带有嵌入式 jetty 服务器的 Web 应用程序。目标打包是 jar,在执行时需要监听 localhost。Web 应用程序按预期工作,我能够调用我使用 RestController
公开的 Rest API。
现在我需要集成一个 SDK(一个独立的 jar)并使用该 jar 公开的功能。
该 jar 是 DLL 的包装器。为了使用它,jar 和 DLL 应该位于同一目录中。它使用 JNI 来公开 DLL 的功能。 我如何将此 SDK(带有 dll 的 jar)集成到我的 maven-springboot 项目中。 SDK是普通java项目的输出(不使用maven)? 从嵌入式服务器调用 dll(使用 System.load())是否有任何限制?会不会出现链接错误?
是否可以将所有内容打包到一个可执行 jar 中(依赖的 jar 和 dll)?
最佳答案
Also is it possible to pack everything in a single executable jar (the depended jar and dll)?
不,任何库(DLL)都必须位于文件系统上并像操作系统一样加载。您无法将其隐藏在 JAR 文件中。
对于System.load()
,不要使用或依赖相对路径。您基本上有两个选择。
- 使用完全限定的文件系统路径引用。
try {
System.load("C:/projects/masterpo/grasshopper.dll");
} catch (UnsatisfiedLinkError e) {
throw new ServletException("Unable to load library");
}
在 JVM 启动时使用
java.library.path
系统属性。这需要您在 JVM 启动指向目录
C:/projects/masterpo/
的有效路径时设置java.library.path
。 (这可能是一个安装步骤)。但随后你可以简单地使用...
try {
System.load("grasshopper");
} catch (UnsatisfiedLinkError e) {
throw new ServletException("Unable to load library");
}
关于System.load()
的使用,请考虑使用Runtime.getRuntime().load(name)
相反。
关于java - 如何从 Spring boot maven web 项目调用 dll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56042739/