繁体   English   中英

如何从Spring Boot Maven Web项目调用dll调用?

[英]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() ,请不要使用或依赖相对路径。 您基本上有两个选择。

  1. 使用标准文件系统路径参考。
try {
    System.load("C:/projects/masterpo/grasshopper.dll");
} catch (UnsatisfiedLinkError e) {
    throw new ServletException("Unable to load library");
}
  1. 在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM