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功能和库。如果有人有同样的问题,我想有一些意见。谢谢。


答案 1

您可以使用扩展在实例上安装 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 发行版


答案 2

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

如果你选择不走这条路,并且想要以较低版本的Java为目标,将弹性beanstalk与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>

仅设置目标选项并不能保证代码实际运行在具有指定版本的 JRE 上。陷阱是意外使用仅在以后的 JRE 中存在的 API,这会使代码在运行时失败并出现链接错误。若要避免此问题,可以将编译器的引导类路径配置为与目标 JRE 匹配,也可以使用 Animal 嗅探器 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


推荐