Spring boot Spring boot createJarFileFromFileEntry

Spring boot Spring boot createJarFileFromFileEntry,spring-boot,Spring Boot,我有一个spring boot应用程序,我用-Dloader.path=启动它。jar文件之一是hive-exec.jar。它绑定了一个名为minlog-1.2.jar的jar文件。如果在-Dloader.path中指定此文件,则会出现错误 java.lang.IllegalStateException:无法打开嵌套项“minlog-1.2.jar”。它已被压缩,嵌套的jar文件必须在不压缩的情况下存储。请检查用于创建可执行jar文件的机制 位于org.springframework.boot.

我有一个spring boot应用程序,我用-Dloader.path=启动它。jar文件之一是hive-exec.jar。它绑定了一个名为minlog-1.2.jar的jar文件。如果在-Dloader.path中指定此文件,则会出现错误

java.lang.IllegalStateException:无法打开嵌套项“minlog-1.2.jar”。它已被压缩,嵌套的jar文件必须在不压缩的情况下存储。请检查用于创建可执行jar文件的机制 位于org.springframework.boot.loader.jar.JarFile.createJarFileFromFileEntry(JarFile.java:378) 位于org.springframework.boot.loader.jar.JarFile.createJarFileFromEntry(JarFile.java:355) 位于org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:341) 位于org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:108) 位于org.springframework.boot.loader.archive.JarFileArchive.getNestedArchives(JarFileArchive.java:92) 位于org.springframework.boot.loader.PropertiesLauncher.getClassPathArchives(PropertiesLauncher.java:445) 位于org.springframework.boot.loader.Launcher.launch(Launcher.java:60) 位于org.springframework.boot.loader.PropertiesLauncher.main(PropertiesLauncher.java:564)

但是,如果我将此文件复制到一个文件夹中,并将该文件夹添加到-Dloader.path中,则不会出现任何错误

我错过了什么


谢谢,

我正在尝试将数据库驱动程序作为外部jar而不是项目的maven依赖项来管理。应用程序使用JPA框架,我们希望能够从一个SQL数据库实现从一个环境切换到另一个环境(例如,开发中的H2,生产中的Oracle)。我必须将h2数据库驱动程序jar作为外部依赖项进行管理。在使用“-Dloader.path”命令行选项加载它时,我遇到了与您描述的相同的问题

查看org.springframework.boot.loader.jar.jar文件源代码,该类以不同的方式管理文件夹条目和jar条目。 getNestedArchives方法似乎调用了引发此异常的createJarFileFromFileEntry方法。 一定有一个很好的理由,如果有人知道,欢迎任何评论

从目录加载jar依赖项时,将使用java.util.jar.JarFile构造函数,并且似乎不会引发任何异常


在createJarFileFromFileEntry方法中,如果要引发一个异常,难道不可能只有一个log.warn而不引发一个异常吗?

据我所知,要使用loader.path,需要使用“org.springframework.boot.loader.PropertiesLauncher”而不是jar launcher。我正在使用它,但它仍然失败,只有一个例外。我猜它下面用的是Jar发射器。打开一个bug怎么样?我也在使用“org.springframework.boot.loader.PropertiesLauncher”。对我来说,有点奇怪的是,我们有不同的行为,通过给包含它的目录和给jar本身来导入一个jar。我将遵循您的建议,并将发行以下版本: