Amazon linux 1 与 Amazon linux 2 中的 Java 8 问题

Posted

技术标签:

【中文标题】Amazon linux 1 与 Amazon linux 2 中的 Java 8 问题【英文标题】:problem with Java 8 in Amazon linux 1 vs Amazon linux 2 【发布时间】:2021-09-10 09:48:51 【问题描述】:

当我将 Springboot 应用程序从 Amazon linux 1 迁移到 Amazon linux 2 时,我遇到了问题。我正在使用 run 文件和 选择 Java 版本 by JAVA_HOME

亚马逊 linux 1:JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk.x86_64 Amazon linux 2:JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.amzn2.0.1.x86_64/jre/bin/java

在 Amazon linux 1 中一切正常,但在 Amazon linux 2 中,我收到 Unsupported major.minor version 52.0 错误。真正让我感到困惑的是,当我更改实例的整个 java 版本(附加图像)时,一切又运行正常了。

我猜问题是我如何指向 java jre,但我无法弄清楚。有人可以帮我解决这个问题。提前致谢。

编辑1:我用来运行的sh文件:

#!/bin/sh
exec 2>&1

ulimit -n 10240

#For Java Classpath
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.amzn2.0.1.x86_64/jre/bin/java
JAVA_BIN=$JAVA_HOME/bin/
export JAVA_HOME

EXTERNAL_HOME=external
EXTERNAL_RESOURCE=$EXTERNAL_HOME/resources

export SPRING_CONFIG_NAME=application
export SPRING_CONFIG_LOCATION=$EXTERNAL_RESOURCE/
export LOG_DIR=$EXTERNAL_HOME/logs
export LANG=ja_JP.UTF-8
cd $EXTERNAL_HOME
echo $SPRING_CONFIG_NAME
echo $SPRING_CONFIG_LOCATION
echo $LOG_DIR
#exec nice -n 20 java -server -Xmx512M -Xms256M -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 -jar external-0.0.1.jar
#exec nice -n 20 java -server -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar external-0.0.1.jar
exec nice -n 20 java -server -Xmx512M -Xms256M -Dlogging.config=file:$EXTERNAL_RESOURCE/log4j2.properties \

 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar external-0.0.1.jar

【问题讨论】:

你是如何运行你的 Spring Boot 应用程序的?通过tomcat? @JigneshM.Khatri 现在我通过 sh 文件使用命令运行它:sudo sh run 因此,无论您正在运行什么脚本,都可能是从错误的位置读取 Java。你能提供你用来运行程序的脚本吗? 它在 Amazon linux 1 中工作的原因是因为它可能只安装了一个 Java。在 Amazon linux 2 中,您安装了多个 Java。并且要执行java 命令,不需要JAVA_HOMEjavaPATH 变量中读取。所以导出JAVA_HOME 本身没有任何意义。检查这个 - ***.com/questions/45246552/java-home-or-path-or-both/… 所以这里必须检查PATH 变量指向的内容。如果它指向另一个你需要的 JVM,那么正如我所说,你需要附加 path to bin 来执行那个特定的 java。 【参考方案1】:

它可能在Amazon linux 1 中工作的原因是它可能只安装了一个Java(或者PATH 指向正确的Java 版本)。在Amazon linux 2 中,您安装了多个 Java。并且要执行 java 命令,JAVA_HOME 不是必需的。 java 命令从 PATH 变量中读取可执行文件。所以导出JAVA_HOME 本身没有任何意义。检查这个 - JAVA_HOME or PATH or BOTH?

所以这里必须检查PATH 变量指向的内容。如果它指向另一个JVM,而不是你需要的,那么你需要附加path to bin来执行那个特定的java,像这样-exec nice -n 20 $JAVA_HOME/bin/java -server ...

根据我个人的观点,没有必要从script 导出任何变量,除非您需要另一个script 中的变量,该变量可能在导出变量的那个变量之后执行。如果您只想在单个 script 中使用该变量,则只需使用它而不导出它。

【讨论】:

以上是关于Amazon linux 1 与 Amazon linux 2 中的 Java 8 问题的主要内容,如果未能解决你的问题,请参考以下文章

Amazon linux 安装mongodb

Amazon EBS 性能提示

Amazon Linux 中的用户权限:root 与 ec2-user

Pymssql 无法连接到 Amazon Linux 2 上的 Azure SQL Server

如何在 amazon micro ec2 服务器(Amazon Linux)上安装 SVN 客户端

使用 Amazon Elastic Beanstalk 部署 symfony2.1 应用程序