it-roy-ru.com

Ошибка: 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

47
user3127896

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

export Java_HOME=$(/usr/libexec/Java_home)
export PATH=$Java_HOME/jre/bin:$PATH

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

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

ПРАВКА

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

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

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

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

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

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

Пример: Java_HOME=/opt/Java/openjdk

72
rbento

Java_HOME должен быть /usr/lib/jvm/Java-7-Oracle/jre/.

18
talex

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

[email protected]:~ → whereis Java

Java:/usr/bin/Java/etc/Java/usr/bin/X11/Java /usr/share/Java /usr/share/man/man1/Java.1.gz

Что нам нужно, так это/usr/bin/Java продолжить в командной строке, чтобы найти абсолютный путь, так как это всего лишь символическая ссылка.

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

lrwxrwxrwx 1 root root 22 мая 2015 г./usr/bin/Java -> /И т.д./альтернатив/Java

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

lrwxrwxrwx 1 root root 39 dic 7 11:52/etc/alternatives/Java -> /USR/Библиотека/JVM/Java-8-Oracle/JRE/бен/Java

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

PATH = "/ usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/Java-8-Oracle/jre/bin " Java_HOME = "/usr/lib/jvm/Java-8-Oracle/jre "

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

source /etc/environment 

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

[email protected]:~ → mvn -version

Apache Maven 3.0.5
Maven home:/usr/share/maven
Версия Java: 1.8.0_77, поставщик: корпорация Oracle
Домой Java:/usr/lib/jvm/Java-8-Oracle/jre
Локаль по умолчанию: es_MX, кодировка платформы: UTF-8
Название ОС: "linux", версия: "3.16.0-70-generic", Arch: "AMD64", семейство: "unix"

13
Juan Manuel Garcia Carmona

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

export Java_HOME=/usr/lib/jvm/Java-7-Oracle
9
Mureinik

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

Сначала найдите местоположение 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
5
tk_

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

export Java_HOME=/usr/Java/jdk1.8.0_31
2
trenixjetix

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

Так что если вы установите

Java_home =/USR/Библиотека/JVM/Java-7-Oracle/JRE/бен/Java

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

Но постановка 

Java_home =/USR/Библиотека/JVM/Java-7-Oracle /

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

2
Jad B.

установить как есть экспорт Java_HOME =/usr/Java/jdk1.8.0_31.и запустить с Sudo, он выполнится ..

2
rohit sawant

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

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.

1
Mohit Garg

Используйте эти две команды (для 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
0
Xdg

Это происходит по причине, указанной ниже: 

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

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

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

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

  if [ -z "$JAVACMD" ] ; then
  if [ -n "$Java_HOME"  ] ; then
    if [ -x "$Java_HOME/jre/sh/Java" ] ; then
      # IBM's 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).

0
Shubham Verma

Если вы используете 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 

0
ishanbakshi