【发布时间】:2019-03-20 11:33:06
【问题描述】:
我们有一个 Spring Boot (v2) 支持的 JavaFX 应用程序 (v8)。更多用户在 Windows 上同时从网络共享运行它(在java -jar 命令中使用批处理)。 Jar 由 Spring Boot Gradle 插件创建,在 Oracle JRE 1.8 上运行。
它可以正常运行几个月,但现在有时无法以错误消息Error: invalid or corrupted jar file 开始。 (清单文件是正确的。)它通常发生在:
- 用户在应用程序运行时锁定了其 PC。在另一个用户登录并尝试启动同一个 jar 之后。这只发生在在锁定的用户会话中运行 jar 的那台 PC 上。它发生在多台机器上,而不仅仅是一台机器上。
- 我们收到了一个错误报告:应用程序抛出了
NoClassDefFoundError,但该类在 jar 中。我认为这些错误有关系。
我们会在一两周后定期发布,并且该错误出现在多个版本中。
我挖了很多东西想找到解决办法或者这个错误的详细描述,但是一无所获。
你有什么想法吗?
P.S.:我们使用这段代码 sn -p 来确定运行的是哪个版本的 jar:
String manifestPath = classPath.substring(0, classPath.indexOf("!") + 1) +
"/META-INF/MANIFEST.MF";
Manifest manifest;
manifest = new Manifest(new URL(manifestPath).openStream());
return "v" + manifest.getMainAttributes().getValue("Manifest-Version");
我们开始使用此代码附近的错误报告。它仅在启动时运行。我看到流没有手动关闭或 try-with-resource 块。它会导致这种行为吗?我认为不是因为 GC 会以未确定的延迟处理流,并且估计两个应用程序启动之间的时间更长。而且它与NoClassDefFoundError没有关联。
【问题讨论】:
标签: java spring-boot javafx jar