모든 사용자를 위해 Linux에서 JAVA_HOME을 설정하는 방법


185

Linux 시스템을 처음 사용하는데 Java 폴더가 너무 많은 것 같습니다.

java -version은 다음을 제공합니다.

  • 자바 버전 "1.7.0_55"
  • OpenJDK 런타임 환경 (rhel-2.4.7.1.el6_5-x86_64 u55-b13)
  • OpenJDK 64 비트 서버 VM (빌드 24.51-b03, 혼합 모드)

Maven 프로젝트를 만들려고 할 때 오류가 발생합니다.

Error: JAVA_HOME is not defined correctly.
We cannot execute /usr/java/jdk1.7.0_05/bin/java

루트가 아닌 사용자뿐만 아니라 루트에 대해 수정해야 할 파일과 Java가 정확히 어디에 있는지 알려주십시오.

답변:


353
  1. find /usr/lib/jvm/java-1.x.x-openjdk
  2. vim /etc/profile

    권한이없는 사용자로 로그인 한 경우 sudo를 추가하십시오. sudo vim

  3. 삽입 모드에 들어가려면 'i'를 누르십시오
  4. 더하다:

    export JAVA_HOME="path that you found"
    
    export PATH=$JAVA_HOME/bin:$PATH
  5. 로그 아웃 한 후 다시 로그인하거나 재부팅하거나 source /etc/profile현재 셸에서 즉시 변경 사항을 적용 하는 데 사용

29
복사 및 붙여 넣기 만하면 문제가 발생할 수 있으므로 큰 따옴표를 삭제하고 키보드에서 다시 작성하는 것을 잊지 마십시오.
Sunil Kumar

12
@rbaleksandar 일부 응용 프로그램은에 의존 JAVA_HOME하므로 설정을 손상시키지 않습니다.
raffian

2
IntelliJ는 그러한 응용 프로그램입니다.
Pete

12
source /etc/profile변경 사항을 즉시 적용 하려면 실행해야합니다 !
Mohamed Taher Alrefaie 2016 년

1
이것은 올바른 방향으로 나를 가리 켰습니다. 실제로 /etc/profile.d/jdk.sh내 시스템 에는 오래된 부패가있었습니다 .
Hermann

109

모든 사용자에게 다음 줄을 넣는 것이 좋습니다. /etc/profile

export JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")

이것은 동적으로 업데이트되며 대체 시스템 과 잘 작동 합니다. 업데이트는 새 로그인 셸에서만 수행됩니다.


10
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:/bin/java::")대신 일반 JRE (머리없는 것) 사용을 준수하기 위해 – 대신 사용하는 것이 java아니라javac
Roman Kruglov

@occulta 적어도 Maven은 JAVA_HOME이 JDK를 가리키고 Java 컴파일러를 찾는 데 사용합니다.
Eero Aaltonen

1
readlink5 년이 지난 스레드라도 업 보트 및 업데이트 / 업그레이드 호환 솔루션입니다. 나는 단지 예를 들어, 편집을 / etc / 프로필하지 않는 것이 좋습니다,하지만 사용자 정의 파일 내부에 수출을 배치 /etc/profile.d/java_environment.sh어쩌면 당신이해야 chmod +x java_environment.sh하고 재부팅.
ChristophS

완전한. 내 dirname성가신 솔루션 보다 낫다 . 당신이 나와 같고 여기서 무슨 일이 일어나고 있는지 이해하고 싶다면 입력의 텍스트를 빈 문자열로 바꾸는 간단한 방법입니다. 대체의 "기본"문자는입니다. /그러나 일관성이 유지되는 /한 다른 것을 대체 할 수 있습니다 . 이 경우 /경로 구분 기호에 사용 되는 콜론 입니다.
Ungeheuer

35

/ etc / profile을 사용하거나 /etc/profile.d/jdk_home.sh와 같은 파일을 더 잘 사용할 수 있습니다

export JAVA_HOME=/usr/java/jdk1.7.0_05/

이 파일은 새로운 로그인 쉘에만로드된다는 것을 기억해야합니다. 따라서 bash -l 또는 새로운 gnome-session 후에는 새로운 Java 버전으로 변경되지 않습니다.


1
적어도 내 리눅스 (라즈 비안)에서는 / etc / profile이 소스가 /etc/profile.d/*.sh되므로 소스 파일 jdk_home.sh을 가져 와서 소스 파일을
가져와야합니다.

감사합니다 @Hilikus :-) 그에 따라 변경했습니다.
flob

2
감사합니다. 나는 두 세계의 최고를 위해 당신과
@Eero

1
이것이 가장 좋은 대답입니다
Jacob

/etc/profile.d/jdk_home.sh에 대해 적어도 훨씬 더 깨끗하고 대답 우분투 , /etc/profile이미 너무 많이 논리로 뭉쳐있다. 그것에 더 추가하는 것이 현명하지 않은 것 같습니다 ...
Ng Sek Long

30

RHEL 7에서는 다른 대답들 중 어느 것도 나를 위해 "고착" 하지 않았 으며 심지어 설정 JAVA_HOME하고 PATH직접 /etc/profile또는 ~/.bash_profile작동하지 않을 수도 있습니다. JAVA_HOME설정 되어 있는지 확인하려고 할 때마다 비어 있습니다.

$ echo $JAVA_HOME
    (<-- no output)

내가해야 할 일은 스크립트 를 설정하는 것 입니다 /etc/profile.d/jdk_home.sh:

#!/bin/sh
export JAVA_HOME=/opt/ibm/java-x86_64-60/
export PATH=$JAVA_HOME/bin:$PATH

처음에는 첫 번째 줄 ( #!/bin/sh)을 무시했으며 그 줄 이 없으면 작동하지 않습니다.

이제 작동합니다.

$ echo $JAVA_HOME
/opt/ibm/java-x86_64-60/

RHEL 7에서도 같은 경험을했습니다. ~ / .bash_profile에서 내보내기를 제거하고이 방법을 사용했습니다.
xpagesbeast

jdk_home.sh에는 #! / bin / sh가 필요하지 않습니다. 구성을 완료하면 로그 아웃했다가 다시 로그인해야합니다
kuhajeyan

12

Linux에서 경로를 설정하는 것은 매우 쉽습니다. 다음과 같이하십시오 :

1 단계 개방형 터미널 및 유형 sudo gedit .bashrc

2 단계 비밀번호를 묻습니다. 암호를 입력하면 bash 파일이 열립니다. 그런 다음 아래로 이동하여 아래에 입력하십시오.

3 단계

   export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"
   export PATH=$PATH:$JAVA_HOME/bin

4 단계 그런 다음 파일을 저장하고 파일을 종료하십시오

위는 단일 사용자를위한 것입니다. 모든 사용자에 대해 아래 단계를 수행해야합니다

1 단계 gedit /etc/profile

2 단계 export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"

3 단계 export PATH=$PATH:$JAVA_HOME/bin

도움이 되었기를 바랍니다. 감사!


2
이 답변은 현재 사용자에 대해서만 설정합니다.
Manuel Manhart

감사합니다 @ickyrr
PyDevSRS

7

오라클의 업무 수행 (전직 Sun 직원 으로서는 익숙하지 않음)

ln -s latestJavaRelease / usr / java / default
여기서 latestJavaRelease는 사용하려는 버전입니다.

그런 다음 JAVA_HOME = / usr / java / default를 내보내십시오.


6

답변은 이전 게시물이 유효합니다. 그러나 다음과 관련하여 하나의 답변이 완전하지는 않습니다.

  1. / etc / profile에 명시된대로 이유 때문에 / etc / profile을 변경하지 않는 것이 좋습니다.
  • 수행중인 작업을 모르면이 파일을 변경하는 것은 좋지 않습니다. /etc/profile.d/에 custom.sh 셸 스크립트를 만들어 환경을 사용자 지정으로 변경하면 나중에 업데이트 할 때 병합 할 필요가 없으므로 훨씬 좋습니다. *
  1. 위에서 언급했듯이 사용자 정의 변경을 위해 /etc/profile.d/custom.sh 파일을 작성하십시오.

  2. 이제 항상 최신 버전의 Java로 업데이트하려면 절대 경로를 지정하지 말고 대신 다음을 사용하십시오.

#JDK를 자바 홈으로 만드는 경우

export JAVA_HOME = $ (읽기 링크 -f / usr / bin / javac | sed "s : / bin / javac ::")

또는

#JRE를 Java 홈으로 만드는 경우

export JAVA_HOME = $ (readlink -f / usr / bin / java | sed "s : / bin / java ::")

  1. 그리고 # 이 있어야합니다 ! custom.sh 파일의 / bin / bash

4

설치 한 bin 파일 경로를 복사하십시오.

YOUR PATH

다음 명령을 입력하여 터미널을 열고 환경 파일을 편집하십시오.

sudo nano /etc/environment

이 파일에서 다음 행을 추가하십시오 ( YOUR_PATH방금 복사 한 경로로 대체 ).

JAVA_HOME="YOUR_PATH"

환경 변수를 설정하기에 충분해야합니다. 이제이 파일을 다시로드하십시오.

source /etc/environment

이제 다음을 실행하여 테스트하십시오.

echo $JAVA_HOME

3
olny 효과 현재 터미널 세션
파티 흐 Türker

@ FatihTürker PC 재부팅
Jack Giffin

나를 jdk11를 사용하기 위해, YOUR_PATH입니다/usr/lib/jvm/default-java/
잭 Giffin

JAVA_HOME 경로가 설정되었지만 작동하지 않습니다. 즉, 자바가 작동하지 않습니다. 재부팅 후에도
Ssenyonjo

2

Linux에서는 ~ / .profile에 다음 줄을 추가합니다.

export JAVA_HOME=$(readlink -ze /usr/bin/javac | xargs -0 dirname -z | xargs -0 dirname)

2
잠재적으로 정답 인 것처럼 보이지만 작동하는지, 즉 그것이 무엇을하고 OP의 문제가 무엇인지 설명 할 수 있습니까? 또한 "Linux에서"라고 말하지만 다양한 Linux 배포판이 있으며 모든 배포판에서 작동하지 않을 수 있습니다.이 배포판이 작동하는 배포판을 추가하십시오.
Buurman

2

이것은 문제를 해결하는 매우 간단한 스크립트입니다

export JAVA_HOME_BIN=`which java`
export JAVA_HOME_DIR=`dirname $JAVA_HOME_BIN`
export JAVA_HOME=`dirname $JAVA_HOME_DIR`

그리고 테스트를 위해 :

echo $JAVA_HOME

2

1 단계- "echo $ JAVA_HOME"으로 현재 Java 버전 확인

2 단계-vim / etc / profile

3 단계-파일 끝에서 JAVA_HOME 내보내기를 찾을 수 있습니다. 여기에 새 경로를 제공해야합니다. 상대 경로가 아닌지 확인하십시오.

4 단계-저장 후 종료 : wq

5 단계- "source / etc / profile /", 변경을 실행합니다

6 단계-다시 $ JAVA_HOME 에코를 수행하십시오. 변경 사항이 반영되었습니다.


2

1 ... 단축 Ctlr+ Alt+ T를 사용하여 터미널 열기

2 ... 아래 명령을 실행하십시오 :

echo export JAVA_HOME='$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")' | sudo tee /etc/profile.d/jdk_home.sh > /dev/null

3 ... (권장) VM / 컴퓨터를 다시 시작하십시오. source /etc/source컴퓨터를 다시 시작하지 않으려면 사용할 수 있습니다

4 ... 단축 Ctlr+ Alt+ T를 사용하여 터미널 열기

5 ... 인증 된 JAVA_HOME 설치

echo $JAVA_HOME

flob 에서 한 줄짜리 사본 , 신용


2
export "JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")" | tee -a /etc/profile && source /etc/profile && echo $JAVA_HOME

1

새로운 로그인을 사용하지 않아도되도록 편집 한 프로파일을 소싱하는 것이 좋습니다.

소스 : / etc / 또는. /기타/

편집 한 프로필은 어디에 있습니까?


1

JAVA_HOME을 설정하는 동안 JAVA_HOME 또는 기타 환경 변수 설정의 이점을 공유하겠습니다.

1) JAVA_HOME을 가리키는 구성 파일 및 응용 프로그램 시작에 영향을 미치지 않고 JDK를 쉽게 업그레이드 할 수 있습니다. 새 버전을 다운로드하고 JAVA_HOME이 새 버전의 Java를 가리키는 지 확인하십시오. 이것은 환경 변수 또는 링크를 사용하는 것이 가장 좋습니다.

2) JAVA_HOME 변수는 JDK 설치 디렉토리의 전체 경로 대신 짧고 간결합니다.

3) JAVA_HOME 변수는 플랫폼 독립성입니다. 즉, 시작 스크립트가 JAVA_HOME을 사용하는 경우 수정없이 Windows 및 UNIX에서 실행할 수 있으므로 각 운영 체제에서 JAVA_HOME을 설정하면됩니다.

더 읽기 : http://javarevisited.blogspot.com/2012/02/how-to-set-javahome-environment-in.html#ixzz4BWmaYIjH


1

의견을 말할 권한이 없으므로 답변으로 게시

참고 : "That Dave Guy"가 게시 한 답변을 따릅니다.

변수를 설정 한 후, 설치된 java 디렉토리에 대한 적절한 권한을 설정하십시오.

chmod -R 755 /usr/java

1

모든 운영 단계 (java, 부모 디렉토리, 편집 파일 찾기 등) 하나의 솔루션

zFileProfile="/etc/profile"
zJavaHomePath=$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)
echo $zJavaHomePath

echo "export JAVA_HOME=\"${zJavaHomePath}\"" >> $zFileProfile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> $zFileProfile

결과:

# tail -2 $zFileProfile
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"
export PATH=$PATH:$JAVA_HOME/bin

설명:

1) 전체 명령을 조각으로 나누자

$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)

2) 자바 명령에서 자바 경로 찾기

# $(which java)
"/usr/bin/java"

3) 상징적 경로에서 상대 경로 얻기

# readlink -ze /usr/bin/java
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java"

4) 부모 경로 얻기 /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java

# readlink -ze /usr/bin/java | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin"

5) 부모 경로 얻기 /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/

# readlink -ze /usr/bin/java | xargs -0 dirname | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"


0

sudo로 kafka-run-class.sh 를 열고 쓰기

kafka 폴더에서 kafka-run-class.sh 를 찾을 수 있습니다 . kafka / bin / kafka-run-class.sh

이 줄을 확인

여기에 이미지 설명을 입력하십시오

else 부분의 JAVA 변수를 수정하여 java / bin의 java 실행 파일을 가리 키십시오. JAVA = "$ JAVA_HOME / java" 와 같은


0

/ etc / profile에서 열면 IT가 해당 파일에 쓰지 않는 것이 좋습니다. 그 대신 명령 스크립트 (test.sh 제공)를 /etc/profile.d 폴더로 이동 한 다음 test.sh를 넣으십시오. 인스턴스를 재부팅 할 때마다 / etc / profile에 의해 자동으로 호출됩니다.


-1

나는 라인을 사용한다 :

export JAVA_HOME=$(readlink -f $(dirname $(readlink -f $(which java) ))/../)

~ ~ .profile에 로그인 할 때 기본 Java 디렉토리의 기본을 사용합니다. 이것은 bash 용입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.