[英]How to invoke dll calls from Spring boot maven web project?
我有Springboot maven项目,用于使用嵌入式码头服务器开发Web应用程序。 目标包装是jar,执行时需要在localhost上侦听RestController
应用程序按预期工作,我能够调用我用RestController
公开的Rest API。
现在,我需要集成一个SDK(一个独立的jar)并使用jar公开的功能。
该罐子是DLL的包装器。 为了使用它,jar和DLL应该在同一目录中。 它使用JNI公开DLL的功能。 我怎样才能将此SDK(带有dll的jar)集成到我的maven-springboot项目中。 SDK是普通Java项目(不使用Maven)的输出? 从嵌入式服务器调用dll(使用System.load()
)是否也有任何限制? 会出现任何链接错误吗?
也有可能将所有内容打包在单个可执行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");
}
在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)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.