developer tip

오류 : JAVA_HOME이 Maven을 올바르게 실행하도록 정의되지 않았습니다.

copycodes 2021. 1. 10. 17:28
반응형

오류 : 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


bash 셸을 사용하고 Oracle 설치 프로그램과 함께 Java를 설치했다고 가정하면 다음을 추가 할 수 있습니다. .bash_profile

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

이것은 JAVA_HOMEOracle 설치 프로그램에서 정의한 올바른 것을 선택하고 $PATH발견되었는지 확인 하기 위해 먼저 설정합니다 .

또한 Java를 업데이트 할 때 나중에 변경할 필요가 없습니다.

편집하다

의견에 따라 :

재부팅 후 영구적으로 만들기

셸 구성 파일에 해당 줄을 추가하기 만하면됩니다. (그것이라고 가정 bash)

예 : .bashrc, .bash_profile또는 .profile(우분투)

사용자 정의 Java 설치 사용

설정 JAVA_HOME포함하지 않는 사용자 정의 자바 설치 경로의 루트 폴더에 $().

전의: JAVA_HOME=/opt/java/openjdk


JAVA_HOME은 /usr/lib/jvm/java-7-oracle/jre/.


터미널을 열고 java의 위치를 ​​찾습니다.

manuel@zonademanel:~ → whereis java

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

우리가 찾고있는 것은 / usr / bin / java가 심볼릭 링크 일 뿐이므로 절대 경로를 찾기 위해 명령 줄에서 계속합니다.

manuel@zonademanel:~ → ls -lah /usr/bin/java

lrwxrwxrwx 1 루트 루트 2015 년 5 월 22 일 / usr / bin / java-> / etc / alternatives / java

manuel@zonademanel:~ → ls -lah /etc/alternatives/java

lrwxrwxrwx 1 루트 루트 39 dic 7 11:52 / etc / alternatives / java-> / usr / lib / jvm / java-8-oracle / jre / bin / java

다음 값으로 / etc / environment 파일을 수정했습니다.

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을 올바르게 실행하십시오.

manuel@zonademanel:~ → mvn -version

Apache Maven 3.0.5
Maven 홈 : / usr / share / maven
Java 버전 : 1.8.0_77, 공급 업체 : Oracle Corporation
Java 홈 : / usr / lib / jvm / java-8-oracle / jre
기본 로케일 : es_MX, 플랫폼 인코딩 : UTF-8
OS 이름 : "linux", 버전 : "3.16.0-70-generic", arch : "amd64", 제품군 : "unix"


$JAVA_HOME 해당 부분 중 하나가 아니라 java가 설치된 디렉토리 여야합니다.

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

몇 가지 이유로 인해이 오류가 발생할 수 있습니다. 이 문제를 빠르게 해결하려면 아래 단계를 따르세요.

먼저 자바 위치를 찾으십시오. 설치된 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

제 경우에는 java가 설치된 전체 디렉토리를 가져와야합니다.

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

export JAVA_HOME = / usr / java / jdk1.8.0_31.로 설정하고 sudo로 실행하면 실행됩니다 ..


첫째, 개발 모드에서는 JRE 대신 JDK를 사용해야합니다. 둘째, JAVA_HOME은 Java를 설치하고 다른 모든 프레임 워크가 필요한 항목 (JRE, javac, ...)을 검색하는 곳입니다.

그래서 설정하면

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

when you run a "mvn" command, Maven will try to access to the java by adding /bin/java, thinking that the JAVA_HOME is in the root directory of Java installation.

But setting

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

Maven will access add bin/java then it will work just fine.


This solution work for me... just type export PATH=$JAVA_HOME/jre/bin:$PATH in the terminal then run mvn -version it will show the same error but with a log like this

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"

now copy the Java home path i.e. /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre in my case.

now type,

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

and the error gets resolve. NOTE: paste your own path which is shown by your machine in mvn log at export JAVA_HOME.


It happens because of the reason mentioned below :

If you see the mvn script: The code fails here ---

Steps for debugging and fixing:

Step 1: Open the mvn script /Users/Username/apache-maven-3.0.5/bin/mvn (Open with the less command like: less /Users/Username/apache-maven-3.0.5/bin/mvn)

Step 2: Find out the below code in the script:

  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

Step3: It is happening because JAVACMD variable was not set. So it displays the error.

Note: To Fix it

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/

Key: If you want it to be permanent open emacs .profile

post the commands and press Ctrl-x Ctrl-c ( save-buffers-kill-terminal ).


If you are using mac-OS , export JAVA_HOME=/usr/libexec/java_home need to be changed to export JAVA_HOME=$(/usr/libexec/java_home) . Steps to do this :

 $ vim .bash_profile

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

 $ source .bash_profile

where /usr/libexec/java_home is the path of your jvm


Use these two commands (for 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

In my case, the problem was in vscode.

I use windows and installed Ubuntu on my computer, so vscode terminal uses the Ubuntu. I just go to settings.json and change to cmd.exe again

ReferenceURL : https://stackoverflow.com/questions/27319495/error-java-home-is-not-defined-correctly-executing-maven

반응형