【问题标题】:SpringBoot .Jar build file limitSpring Boot .Jar 构建文件限制
【发布时间】:2017-01-10 14:50:00
【问题描述】:

我正在尝试构建一个 6GB 大小的 .JAR 存档,但它不起作用。如果我将文件减少到 4GB (4096MB) 限制,则构建成功后,文件似乎有 4GB 的限制。但我需要它 >=6GB 并且它必须包含 25000 个文件。请帮帮我。

我在尝试启动此 .jar 时遇到的错误:

Exception in thread "main" java.lang.IllegalStateException:   java.lang.IndexOutOfBoundsException
    at org.springframework.boot.loader.ExecutableArchiveLauncher.<init>(ExecutableArchiveLauncher.java:43)
    at org.springframework.boot.loader.JarLauncher.<init>(JarLauncher.java:35)
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: java.lang.IndexOutOfBoundsException
    at org.springframework.boot.loader.jar.AsciiBytes.<init>(AsciiBytes.java:69)
    at org.springframework.boot.loader.jar.CentralDirectoryFileHeader.load(CentralDirectoryFileHeader.java:83)
    at org.springframework.boot.loader.jar.CentralDirectoryParser.parseEntries(CentralDirectoryParser.java:68)
    at org.springframework.boot.loader.jar.CentralDirectoryParser.parse(CentralDirectoryParser.java:57)
    at org.springframework.boot.loader.jar.JarFile.<init>(JarFile.java:118)
    at org.springframework.boot.loader.jar.JarFile.<init>(JarFile.java:106)
    at org.springframework.boot.loader.jar.JarFile.<init>(JarFile.java:92)
    at org.springframework.boot.loader.jar.JarFile.<init>(JarFile.java:83)
    at org.springframework.boot.loader.archive.JarFileArchive.<init>(JarFileArchive.java:61)
    at org.springframework.boot.loader.archive.JarFileArchive.<init>(JarFileArchive.java:57)
    at org.springframework.boot.loader.Launcher.createArchive(Launcher.java:129)
    at org.springframework.boot.loader.ExecutableArchiveLauncher.<init>(ExecutableArchiveLauncher.java:40)
    ... 2 more

【问题讨论】:

  • 我真的很惊讶现在仍然看到这种方法,因为其他人都在谈论微服务。这看起来真的像一个弹簧靴巨石!
  • 也许你还在使用 Java 6?你的环境是什么(JDK、操作系统、文件系统)?
  • 我正在使用 Java8、Windows 10、NTFS 文件系统。

标签: java spring spring-boot jar


【解决方案1】:

即使我真的不喜欢支持这种方法,如果您使用 Java 7 和也支持这种方法的文件系统/操作系统,原则上它应该可以工作。使用 Java 6 你没有机会,但无论如何这都是 EOL。另见What is the maximum number of files per jar?

【讨论】:

  • 但我使用的是 Java 8!我不明白。我应该使用什么其他方法?我可以将资源文件夹放在 .jar 文件所在的位置,但不知道如何在 .jar 中使用它。
【解决方案2】:

Spring boot loader 不支持 zip64 格式:https://github.com/spring-projects/spring-boot/issues/2895

重组您的项目以将您的一些类打包到嵌套的 jar 中。如果您使用的是 gradle,这应该可以通过多模块项目轻松实现。

【讨论】:

    【解决方案3】:

    我只是将 SpringBoot 的 addResourceLocations() 与指向该 .JAR 的类路径一起使用。就这么简单,我以前也这样做过,只是忘记了。傻我。

    【讨论】:

    • 您能否详细介绍一下您的解决方案?我也面临同样的问题。
    • 嗨,Ajoy。尝试构建一个 6gb 大小的 Jar 并不聪明。您只需使用 addResourceLocations() 指定项目中某处的位置文件的路径。这不会很难,但我无法进一步帮助你,因为我不记得我是怎么做到的!
    • 其实我的问题已经解决了。我正在尝试编写 REST API 来下载大文件(约 5 GB)的方法。我发现我用于测试的一个 5 GB 文件位于src/main/resources 下。删除了它,以及 POM 中的一些不必要的依赖项。这降低了 JAR 的大小,我的测试成功了。
    猜你喜欢
    • 2016-05-01
    • 2016-09-29
    • 2021-02-27
    • 2017-02-11
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    相关资源
    最近更新 更多