java - 如何从 Spring Boot maven Web 项目调用 dll 调用?
问题描述
我有 Springboot maven 项目来开发带有嵌入式码头服务器的 Web 应用程序。目标包装是 jar 并且在执行时它需要在 localhost 上侦听。Web 应用程序按预期工作,我能够调用我公开的 Rest API RestController
。
现在我需要集成一个 SDK(一个独立的 jar)并使用 jar 公开的功能。
jar 是 DLL 的包装器。为了使用它,jar 和 DLL 应该在同一个目录中。它使用 JNI 来公开 DLL 的功能。如何将此 SDK(带 dll 的 jar)集成到我的 maven-springboot 项目中。SDK是普通java项目的输出(不使用maven)?System.load()
从嵌入式服务器调用 dll(使用)是否有任何限制?会不会有联动错误?
是否可以将所有内容打包在一个可执行的 jar(依赖的 jar 和 dll)中?
解决方案
是否可以将所有内容打包在一个可执行的 jar(依赖的 jar 和 dll)中?
不,任何库(DLL)都必须在文件系统上并像操作系统一样加载。您不能将其隐藏在 JAR 文件中。
至于System.load()
,不要使用或依赖于相对路径。你基本上有两个选择。
- 使用完全限定的文件系统路径引用。
try {
System.load("C:/projects/masterpo/grasshopper.dll");
} catch (UnsatisfiedLinkError e) {
throw new ServletException("Unable to load library");
}
java.library.path
在 JVM 启动时使用系统属性。这将要求您设置
java.library.path
JVM 启动时指向该目录的有效内容C:/projects/masterpo/
。(这可能是一个安装步骤)。但是你可以简单地使用......
try {
System.load("grasshopper");
} catch (UnsatisfiedLinkError e) {
throw new ServletException("Unable to load library");
}
关于 的使用System.load()
,请考虑Runtime.getRuntime().load(name)
改为使用。
推荐阅读
- python - 如何在创建我的实例的实例中调用方法
- python - 在 pyqt 函数 QIcon 中返回 ":/filename" 的路径
- flutter - 运行 pub get 时出现 Flutter 提供程序安装错误
- python - 是否有允许 PyQt5 打开两个填满整个屏幕的窗口的功能?
- .net-core - Azure AD 保护 API - GetAccessTokenForUserAsync 不包括声明角色
- mongodb - 将 Jenssegers MongoDB 与 Slim 和 Capsule 一起使用
- python - 根据转置数据创建新列
- javascript - 键具有点字符时的对象解构
- python - Pygame:单击某些按钮时,计时器会下降
- python - 有没有办法通过将字段字符串与值数组匹配来在 mongo 中查找记录