Подтвердить что ты не робот

Ошибка: JAVA_HOME не определен правильно, выполняя maven

Я установил java и установил путь к среде, и когда я выполняю echo $JAVA_HOME, я получаю следующий вывод:

/usr/lib/jvm/java-7-oracle/jre/bin/java

Я также установил apache-maven и изменил файл environment, и теперь он выглядит так:

JAVA_HOME="/usr/lib/jvm/java-7-oracle/jre/bin/java"
M2_HOME=/usr/local/apache-maven/apache-maven-3.0.5
M2=$M2_HOME/bin
MAVEN_OPTS="-Xms256m -Xmx512m"
PATH=$M2:$PATH

Но когда я выполняю mvn --version, я получаю предупреждение:

Error: JAVA_HOME is not defined correctly.
  We cannot execute /usr/lib/jvm/java-7-oracle/jre/bin/java/bin/java

Невозможно выяснить, почему в конце он повторяется /bin/java/bin/java

4b9b3361

Ответ 1

Предполагая, что вы используете оболочку bash и установленную Java с установщиком Oracle, вы можете добавить следующее в .bash_profile

export JAVA_HOME=$(/usr/libexec/java_home)
export PATH=$JAVA_HOME/jre/bin:$PATH

Это выберет правильный JAVA_HOME, как определено установщиком Oracle, и установит его первым в вашем $PATH, убедившись, что он найден.

Кроме того, вам не нужно менять его позже при обновлении Java.

EDIT

Согласно комментариям:

Делаем его постоянным после перезагрузки

Просто добавьте эти строки в файл конфигурации оболочки. (Предполагая это bash)

Например: .bashrc, .bash_profile или .profile (для Ubuntu)

Использование пользовательской установки Java

Установите JAVA_HOME в корневую папку пользовательского пути установки Java без $().

Пример: JAVA_HOME=/opt/java/openjdk

Ответ 2

JAVA_HOME должен быть /usr/lib/jvm/java-7-oracle/jre/.

Ответ 3

Мы открываем терминал и ищем местоположение java:

[email protected]:~ → whereis java

java:/usr/bin/java/etc/java/usr/bin/X11/java/usr/share/java /usr/share/man/man 1/java.1.gz

Мы ищем /usr/bin/java в командной строке, чтобы найти абсолютный путь, поскольку это только символическая ссылка.

[email protected]:~ → ls -lah /usr/bin/java

lrwxrwxrwx 1 корень root 22 мая 19 2015/usr/bin/java → /И т.д./альтернатив/Java

[email protected]:~ → ls -lah /etc/alternatives/java

lrwxrwxrwx 1 корень root 39 dic 7 11:52/etc/alternatives/java → /USR/Library/JVM/Java-8-оракула/JRE/бен/Java

Я изменил свой файл /etc/environment со следующими значениями

PATH = "/USR/локальные/SBIN:/USR/локальные/бен:/USR/SBIN:/USR/бен:/SBIN:/бен:/USR/игры:/USR/локальные/игры: /USR/Library/JVM/Java-8-оракул/JRE/бен" JAVA_HOME = "/USR/Library/JVM/Java-8-оракула/JRE"

Если я не хочу переписывать, я могу перезагрузить изменения с помощью:

source /etc/environment 

И запустите mvn -version правильно

[email protected]:~ → mvn -version

Apache Maven 3.0.5
Maven:/usr/share/maven
Версия Java: 1.8.0_77, поставщик: Oracle Corporation
Java home:/usr/lib/jvm/java-8-oracle/jre
Язык по умолчанию: es_MX, кодировка платформы: UTF-8
Название ОС: "linux", версия: "3.16.0-70-generic", arch: "amd64", family: "unix"

Ответ 4

$JAVA_HOME должен быть каталог, в котором была установлена ​​java, а не одна из его частей:

export JAVA_HOME=/usr/lib/jvm/java-7-oracle

Ответ 5

Вы можете получить эту ошибку из-за нескольких причин. Чтобы быстро исправить это, выполните следующие шаги,

Сначала найдите местоположение java. Чтобы получить список установленных платформ Java, выполните следующую команду с терминала:

$ sudo update-alternatives --config java

Теперь установите JAVA_HOME и PATH,

$ export JAVA_HOME=<java_home>

$ export PATH=$JAVA_HOME/jre/bin:$PATH

Создайте символическую ссылку

$ sudo ln -s <java_home>/jre <java_symlink_path>

Когда мы возьмем ваше дело в качестве примера:

$ sudo ln -s /usr/lib/jvm/java-7-oracle/jre /usr/lib/jvm/java-7-oracle/jre/bin/java

Выше команда создаст местоположение символической ссылки, где система пытается найти в вашей проблеме.

Наконец, сделайте

$ mvn --version

Ответ 6

Вы должны взять весь каталог, где установлена ​​java, в моем случае:

export JAVA_HOME=/usr/java/jdk1.8.0_31

Ответ 7

установить как экспортировать JAVA_HOME =/usr/java/jdk1.8.0_31.and запустить с помощью sudo, который он выполнит.

Ответ 8

Во-первых, в режиме разработки вы должны использовать JDK вместо JRE. Во-вторых, JAVA_HOME - это место, где вы устанавливаете Java и где все остальные фреймворки будут искать то, что им нужно (JRE, javac,...)

Итак, если вы установили

JAVA_HOME =/USR/Library/JVM/Java-7-оракула/JRE/бен/Java

когда вы запускаете команду "mvn", Maven попытается получить доступ к java, добавив /bin/java, считая, что JAVA_HOME находится в корневом каталоге установки Java.

Но установка

JAVA_HOME =/USR/Library/JVM/Java-7-оракула/

Maven получит доступ к bin/java, тогда он будет работать нормально.

Ответ 9

Это решение работает для меня... просто введите export PATH=$JAVA_HOME/jre/bin:$PATH в терминале затем запустите mvn -version будет отображаться та же ошибка, но с таким журналом, как этот

which: no javac in (/jre/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/puppetlabs/bin)
Warning: JAVA_HOME environment variable is not set.
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T22:59:23+05:30)
Maven home: /opt/apache-maven-3.2.5
Java version: 1.8.0_171, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix"

Теперь скопируйте путь Java home, т.е. /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre в моем случае.

сейчас наберите

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre

и ошибка решается. ПРИМЕЧАНИЕ: вставьте свой собственный путь, который отображается вашей машиной в журнале mvn при экспорте JAVA_HOME.

Ответ 10

Это происходит по причине, упомянутой ниже:

Если вы видите mvn script: здесь не работает код

Шаги для отладки и исправления:

Шаг 1: Откройте mvn script/Users/Username/apache-maven-3.0.5/bin/mvn (Открыть с помощью команды less: less/Users/Username/apache-maven-3.0.5/bin/mvn)

Шаг 2: Выясните приведенный ниже код в script:

  if [ -z "$JAVACMD" ] ; then
  if [ -n "$JAVA_HOME"  ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
      # IBM JDK on AIX uses strange locations for the executables
      JAVACMD="$JAVA_HOME/jre/sh/java"
    else
      JAVACMD="$JAVA_HOME/bin/java"
    fi
  else
    JAVACMD="`which java`"
  fi
fi

if [ ! -x "$JAVACMD" ] ; then
  echo "Error: JAVA_HOME is not defined correctly."
  echo "  We cannot execute $JAVACMD"
  exit 1
fi

Шаг 3: Это происходит потому, что переменная JAVACMD не была установлена. Таким образом, отображается ошибка.

Примечание. Чтобы исправить его

export JAVACMD=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/bin/java

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/

Ключ: Если вы хотите, чтобы он был постоянным открыть emacs.profile

отправить команды и нажмите Ctrl-x Ctrl-c (save-buffers-kill-terminal).

Ответ 11

Если вы используете mac-OS, export JAVA_HOME=/usr/libexec/java_home необходимо изменить на export JAVA_HOME=$(/usr/libexec/java_home). Шаги для этого:

 $ vim .bash_profile

 export JAVA_HOME=$(/usr/libexec/java_home)

 $ source .bash_profile

где /usr/libexec/java_home - путь вашего jvm

Ответ 12

Используйте эти две команды (для Java 8):

sudo update-java-alternatives --set java-8-oracle
java -XshowSettings 2>&1 | grep -e 'java.home' | awk '{print "JAVA_HOME="$3}' | sed "s/\/jre//g" >> /etc/environment

Ответ 13

В моем случае проблема была в vscode.

Я использую Windows и установил Ubuntu на свой компьютер, поэтому терминал vscode использует Ubuntu. Я просто захожу в settings.json и снова меняю на cmd.exe