java - 从java库路径加载库

时间:2018-03-27 17:27:36

标签: java

我依赖于我需要在运行时加载的库src/main/resources/libs64/thelib.dll

System.setProperty("java.library.path", 
                    Paths.get(System.getProperty("user.dir"),
                      "src", "main", "resources", "libs64").toAbsolutePath().toString())

当我运行spring boot app

mvn package
java -jar springapp.jar

我告诉我

java.lang.UnsatisfiedLinkError: no src/main/resources/libs64/thelib in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867) ~[na:1.8.0_92]
    at java.lang.Runtime.loadLibrary0(Runtime.java:870) ~[na:1.8.0_92]
    at java.lang.System.loadLibrary(System.java:1122) ~[na:1.8.0_92]

当我在Eclipse中设置库路径src/main/resources/libs64时,它可以工作,java.library.path打印出来与

相同
Paths.get(System.getProperty("user.dir"),
                          "src", "main", "resources", "libs64").toAbsolutePath().toString())

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

using (var compressedStream = new GZipStream(rawStream, CompressionLevel.Fastest)) using (var encodedStream = new CryptoStream(compressedStream, new ToBase64Transform(), CryptoStreamMode.Read)) { await UploadFile(encodedStream); } 是Eclipse项目中库的路径。在没有Eclipse工作区的系统上,这将永远不会起作用。

当您将应用程序打包到Jar中时,库(作为资源)将被复制到该jar中,位于路径src/main/resources/libs64下方的某个位置。

AFAIK Java无法加载驻留在zip / jar文件中的库。因此你必须提取到例如到temp目录然后从那里加载它。或者,您不必将库打包到Jar文件中,只需将其部署到JAR文件旁边即可。然后,您可以直接从JAR文件的安​​装位置加载它。