【问题标题】:Spring Boot Elastic Beanstalk java.time.DateTimeException when running java -jar运行 java -jar 时的 Spring Boot Elastic Beanstalk java.time.DateTimeException
【发布时间】:2020-04-29 23:06:20
【问题描述】:

我使用 CodePipeline 在 AWS Elastic Beanstalk 上部署了一个 Spring Boot 多模块项目。

我的档案: web: java -jar parent/module1/target/y-0.0.1-SNAPSHOT.jar

我的构建文件: build: cd parent && mvn package

我得到的输出是:

Exception in thread "main" java.time.DateTimeException: Invalid value for MonthOfYear (valid values 1 - 12): 0
        at java.time.temporal.ValueRange.checkValidValue(ValueRange.java:311)
        at java.time.temporal.ChronoField.checkValidValue(ChronoField.java:703)
        at java.time.LocalDate.of(LocalDate.java:267)
        at java.time.LocalDateTime.of(LocalDateTime.java:336)
        at org.springframework.boot.loader.jar.CentralDirectoryFileHeader.decodeMsDosFormatDateTime(CentralDirectoryFileHeader.java:127)
        at org.springframework.boot.loader.jar.CentralDirectoryFileHeader.getTime(CentralDirectoryFileHeader.java:116)
        at org.springframework.boot.loader.jar.JarEntry.<init>(JarEntry.java:58)
        at org.springframework.boot.loader.jar.JarFileEntries.getEntry(JarFileEntries.java:316)
        at org.springframework.boot.loader.jar.JarFileEntries.access$400(JarFileEntries.java:48)
        at org.springframework.boot.loader.jar.JarFileEntries$EntryIterator.next(JarFileEntries.java:366)
        at org.springframework.boot.loader.jar.JarFileEntries$EntryIterator.next(JarFileEntries.java:350)
        at org.springframework.boot.loader.jar.JarFile$2.nextElement(JarFile.java:204)
        at org.springframework.boot.loader.jar.JarFile$2.nextElement(JarFile.java:195)
        at org.springframework.boot.loader.archive.JarFileArchive$EntryIterator.next(JarFileArchive.java:189)
        at org.springframework.boot.loader.archive.JarFileArchive$EntryIterator.next(JarFileArchive.java:174)
        at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchives(JarFileArchive.java:85)
        at org.springframework.boot.loader.ExecutableArchiveLauncher.getClassPathArchives(ExecutableArchiveLauncher.java:69)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52)

我在我的 EC2 实例上手动执行 java -jar 命令,它产生了同样的错误。

找解释的时候没找到很多,但我觉得可能是java版本的。

openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

EC2 操作系统:

NAME="Amazon Linux AMI"
VERSION="2018.03"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2018.03"
PRETTY_NAME="Amazon Linux AMI 2018.03"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2018.03:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"

编辑:我也发现了这个 - https://github.com/spring-projects/spring-boot/issues/19518

【问题讨论】:

    标签: java amazon-web-services spring-boot amazon-elastic-beanstalk aws-codepipeline


    【解决方案1】:

    您的 JAR 文件似乎有问题: CentralDirectoryFileHeader 正在读取(ZIP 压缩的)JAR 文件并遇到不正确的日期戳。

    https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/CentralDirectoryFileHeader.java

    编辑:根据https://github.com/spring-projects/spring-boot/issues/19518,当创建 JAR 的系统的系统时间为 1970 时,就会发生这种情况。

    截至今天(2020 年 1 月),尚未发布错误修复。 要解决这个问题,您必须在正确设置系统时间后创建一个新的 JAR。

    【讨论】:

    • 谢谢,但我对此不是很熟悉。你能详细说明一下吗?执行立即失败。
    • 看起来您找到了解决此问题的正确问题。我已经更新了上面的答案。
    • 谢谢。我放弃了 Elastic Beanstalk 并使用 ubuntu 创建了一个常规 EC2 实例,并安装了另一个版本的 jdk 来解决这个问题。
    猜你喜欢
    • 2017-08-09
    • 2021-03-29
    • 2016-06-16
    • 2018-08-16
    • 2016-04-02
    • 2016-11-07
    • 2014-11-24
    • 2021-04-06
    • 2019-04-20
    相关资源
    最近更新 更多