繁体   English   中英

用于 Spring 启动项目的 AWS beanstalk 上的 Java 11

[英]Java 11 on AWS beanstalk for Spring boot project

我是 Spring Boot 的新手,我正在尝试开发一个应用程序,以便稍后将其部署在 AWS beanstalk 上。 我开始使用 java 11 的项目,但后来我发现 AWS 只支持 java 8。是否可以将 pom.xml 中的 'maven.compiler.target' 设置为 1.8 以使其正常运行? 我是否必须使用 Java 1.8 进行开发和编译? 我想使用新的 Java 功能和库。 如果有人有同样的问题,我想发表一些意见。 谢谢。 光盘

既然您使用的是 Java 11,为什么不利用 Java 和 Elastic Bean Stalks docker 支持并使用 JDK11 创建一个 docker 映像并使用它进行部署?

如果您选择不走这条路,并且希望针对较低版本的 Java 将弹性 beantalk 与 Java 8 结合使用,则可以尝试这样的操作。

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>11</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>

仅设置 target 选项并不能保证您的代码实际运行在具有指定版本的 JRE 上。 陷阱是意外使用仅存在于后续 JRE 中的 API,这会使您的代码在运行时失败并出现链接错误。 为避免此问题,您可以配置编译器的引导类路径以匹配目标 JRE,或者使用 Animal Sniffer Maven 插件来验证您的代码没有使用意外的 API。 同样,设置 source 选项并不能保证您的代码实际上在具有指定版本的 JDK 上编译。 使用特定的 JDK 版本编译您的代码,不同于用于启动的版本

但请记住,如果您在 Java 8 上编译和运行代码,则不能使用已添加到 Java 11 中的 Java 标准库中的类,因为这些类不会出现在 Java 8 上。 链接

在搜索时,我发现对 OpenJDK11 的支持可能即将到来。 we re-affirm that the OpenJDK 8 and OpenJDK 11 Java runtimes in Amazon Linux 2 will continue to receive free long-term support from Amazon until at least June 30, 2023 链接

您可以使用ebextensions在您的实例上安装 java 11。 只需在源包中创建一个文件夹.ebextensions并在其中添加一个具有以下名称10_java.config和内容的文件:

[更新:修复了 yaml 文件的格式]

container_commands:
    100-remove-old-java:
        command: "sudo yum remove -y java-1.8.0-openjdk-headless"
    200-download-rpm-package:
        command: "wget https://d3pxv6yz143wms.cloudfront.net/11.0.4.11.1/java-11-amazon-corretto-devel-11.0.4.11-1.x86_64.rpm "
    300-install-java:
        command: "sudo yum localinstall -y java-11-amazon-corretto-devel-11.0.4.11-1.x86_64.rpm"

这将删除默认的Java 8和安装AWS” 分布的Java 11。

截至 2020 年 5 月,在 64 位 Amazon Linux 2 上运行的 Corretto 11 现在是 Elastic Beanstalk 中的托管平台。 以下是对可用 Java SE 平台的参考:

https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.javase

当您使用特定的 Java 版本编译 Java 项目时,您只能使用大于(或等于)用于编译它的版本来运行它。 不能做相反的事情,至少如果您正在使用更高版本中存在的语言功能,则不能。

例如,您不能使用 Java 11 的功能,但可以在 Java 8 中运行应用程序

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM