Ошибка: 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
Ответы
Ответ 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