проблема с Java 8 в Amazon linux 1 и Amazon linux 2

У меня возникла проблема при переносе для запуска моего приложения Springboot с Amazon linux 1 на Amazon linux 2. Я использую файл run с выбором версии Java с помощью < strong>JAVA_HOME:

  • Amazon 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

person Dattq2303    schedule 28.06.2021    source источник
comment
Как вы запускаете приложение Spring Boot? Через кота?   -  person Jignesh M. Khatri    schedule 28.06.2021
comment
@JigneshM.Khatri Прямо сейчас я запускаю его с помощью файла sh с помощью команды: sudo sh run   -  person Dattq2303    schedule 28.06.2021
comment
Итак, какой бы сценарий вы ни запускали, возможно, он читает Java из неправильного места. Можете ли вы предоставить сценарий, который вы используете для запуска программы.   -  person Jignesh M. Khatri    schedule 28.06.2021
comment
@JigneshM.Khatri Я добавляю, пожалуйста, проверьте   -  person Dattq2303    schedule 28.06.2021
comment
Хорошо, я подозреваю несколько вещей здесь. Во-первых, /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.amzn2.0.1.x86_64/jre/bin/java этот путь содержит каталог /bin, а этот каталог bin содержит исполняемые файлы Java? Во-вторых, в команде exec добавьте $JAVA_BIN перед java, чтобы она читала Java по правильному пути - что-то вроде этого exec nice -n 20 $JAVA_BIN/java -server ....   -  person Jignesh M. Khatri    schedule 28.06.2021
comment
@JigneshM.Khatri Во-первых: да, он содержит исполняемый файл Java. Во-вторых: я считаю, что экспорт JAVA_HOME поможет, поэтому нет необходимости в $ JAVA_BIN. Я обычно запускаю это на Amazon Linux 1.   -  person Dattq2303    schedule 28.06.2021
comment
Причина, по которой он работает в Amazon linux 1, заключается в том, что там может быть установлена ​​только одна Java. В Amazon linux 2 у вас установлено несколько Java. А для выполнения команды java JAVA_HOME не требуется. java читает из PATH переменной. Таким образом, экспорт JAVA_HOME не имеет никакого смысла. Проверьте это - stackoverflow.com/questions /45246552/java-дом-или-путь-или-оба/   -  person Jignesh M. Khatri    schedule 28.06.2021
comment
Итак, здесь обязательно нужно проверить, на что указывает переменная PATH. Если он указывает на другую JVM, чем та, которая вам нужна, то, как я уже сказал, вам нужно добавить path to bin для выполнения этого конкретного java.   -  person Jignesh M. Khatri    schedule 28.06.2021
comment
@JigneshM.Khatri Я постараюсь, как ты сказал. Спасибо за ваш комментарий   -  person Dattq2303    schedule 28.06.2021
comment
@JigneshM.Khatri Вы правы, сэр. После добавления PATH он снова работает. А в Amazon linux 1 мой коллега изменил версию экземпляра Java на Java 8, что привело к тому, что я считаю, что мой файл запуска sh был правильным. Пожалуйста, напишите ответ, чтобы я мог его принять.   -  person Dattq2303    schedule 28.06.2021


Ответы (1)


Причина, по которой он может работать в Amazon linux 1, заключается в том, что там может быть установлена ​​только одна Java (или PATH указывает на правильную версию Java). В Amazon linux 2 у вас установлено несколько Java. А для выполнения java-команды JAVA_HOME не требуется. Команда java читает исполняемый файл из переменной PATH. Таким образом, экспорт JAVA_HOME не имеет никакого смысла. Проверьте это - JAVA_HOME или PATH или ОБА?

Итак, здесь обязательно нужно проверить, на что указывает переменная PATH. Если он указывает на другой JVM, чем тот, который вам нужен, вам нужно добавить path to bin для выполнения этого конкретного java, что-то вроде этого - exec nice -n 20 $JAVA_HOME/bin/java -server ....

Также, по моему личному мнению, нет необходимости экспортировать какую-либо переменную из script, если только вам не нужна эта переменная в другом script, который может выполняться после того, который экспортирует переменную. Если вы хотите использовать эту переменную только в одном script, просто используйте ее, не экспортируя.

person Jignesh M. Khatri    schedule 28.06.2021