your programing

OS X에서 기본 Java (JDK) 버전을 설정하거나 변경하는 방법은 무엇입니까?

lovepro 2020. 10. 2. 23:04
반응형

OS X에서 기본 Java (JDK) 버전을 설정하거나 변경하는 방법은 무엇입니까?


Mac에서 Java의 기본 버전을 어떻게 변경할 수 있습니까?


/usr/libexec/java_home -V다음과 같은 내용을 출력하는 첫 번째 실행 :

Matching Java Virtual Machines (3):
1.8.0_05, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
1.6.0_65-b14-462, x86_64:   "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-462, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

기본값이 될 버전을 선택하십시오 ( 1.6.0_65-b14-462인수를 위해).

export JAVA_HOME=`/usr/libexec/java_home -v 1.6.0_65-b14-462`

또는 다음과 같이 주 버전 만 지정할 수 있습니다.

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

이제 실행 java -version하면 다음이 표시됩니다.

java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)

export JAVA_HOME…쉘의 init 파일에 라인을 추가 하십시오.

Bash의 경우 ( antonyh 에서 언급 한대로 ) :

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

이 답변은 macOS El Capitan 이상 (Sierra, High Sierra, Mojave) 에서 개발 목적으로 여러 버전의 JDK 가 설치된 경우 시스템 전체에서 Java 버전제어 하는 방법 (현재 실행중인 셸뿐만 아니라) 을 해결하려는 시도 입니다 . 내가 말할 수있는 한, 현재 답변 중 어느 것도 그렇게하지 않습니다 (*).

개발자로서 저는 여러 JDK를 사용하며 하나에서 다른 것으로 쉽게 전환하고 싶습니다. 일반적으로 나는 일반적인 사용을 위해 최신 안정된 것을 가지고 있고 테스트를 위해 다른 것을 가지고 있습니다. 하지만 시스템 (예 : IDE를 시작할 때)이 현재 가지고있는 최신 "얼리 액세스"버전을 사용하는 것을 원하지 않습니다. 시스템의 기본값을 제어하고 싶습니다. 최신 안정 버전이어야합니다.

다음 접근 방식은 Oracle JDK 또는 OpenJDK ( 2018 년 10 월 중순 이후에 생성 된 AdoptOpenJDK 빌드 포함 )를 사용 하여 Java 7 ~ 12 (이 문서 작성 당시 조기 액세스)에서 작동합니다 .

타사 도구가없는 솔루션 :

  • 모든 JDK를 기본 위치의 /Library/Java/JavaVirtualMachines. 시스템은 기본적으로 가장 높은 버전을 선택합니다.
  • JDK가 기본적으로 선택되지 않도록 제외하려면 이름 Contents/Info.plistInfo.plist.disabled . 해당 JDK를 $JAVA_HOME가리킬 때 사용 하거나 스크립트 또는 구성에서 명시 적으로 참조 할 수 있습니다. 단순히 시스템의 java명령에 의해 무시됩니다 .

시스템 런처는 Info.plist파일 이있는 버전 중 가장 높은 버전의 JDK를 사용 합니다.

대체 JDK가있는 셸에서 작업 할 때 기존 답변 ( jenv또는 사용자 지정 별칭 / 스크립트 /usr/libexec/java_home등) 중에서 방법을 선택합니다 .


이 요점 에 대한 조사의 세부 사항 .


(*) 현재 답변은 더 이상 사용되지 않거나 (macOS El Capitan 또는 Sierra에 더 이상 유효하지 않음) 단일 JDK 만 처리하거나 시스템 전체 측면을 처리하지 않습니다. 많은 사람들 $JAVA_HOME변경 방법을 설명 하지만 이것은 현재 셸과 거기에서 시작되는 항목에만 영향을 미칩니다. OS 런처에서 시작된 애플리케이션에는 영향을 미치지 않습니다 (올바른 파일을 변경하지 않는 한 지루한 로그 아웃 / 로그인). jenv와 동일하지만 멋지지만 내가 말할 수있는 한 환경 변수 만 변경하므로 동일한 제한이 있습니다.


위의 답변에 추가하여 다음 줄을 추가하여 .bash_profile전환하는 것이 정말 편리합니다 (Java 9에 대한 @elektromin의 주석 포함).

alias j12="export JAVA_HOME=`/usr/libexec/java_home -v 12`; java -version"
alias j11="export JAVA_HOME=`/usr/libexec/java_home -v 11`; java -version"
alias j10="export JAVA_HOME=`/usr/libexec/java_home -v 10`; java -version"
alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version"
alias j8="export JAVA_HOME=`/usr/libexec/java_home -v 1.8`; java -version"
alias j7="export JAVA_HOME=`/usr/libexec/java_home -v 1.7`; java -version"

삽입 후 실행 $ source .bash_profile

다음을 입력하여 Java 8로 전환 할 수 있습니다.

$ j8
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)

/ usr / libexec / java_home 기반의 작은 물고기 함수

function jhome
    set JAVA_HOME (/usr/libexec/java_home $argv)
    echo "JAVA_HOME:" $JAVA_HOME
    echo "java -version:"
    java -version
end

물고기를 사용하지 않는 경우 bash에서 비슷한 작업을 수행 할 수 있습니다.

#!/bin/bash

jhome () {
  export JAVA_HOME=`/usr/libexec/java_home $@`
  echo "JAVA_HOME:" $JAVA_HOME
  echo "java -version:"
  java -version
}

그런 다음 Java간에 전환하려면 다음을 수행하십시오.

$> jhome           #switches to latest java
$> jhome -v 1.7    #switches to java 1.7
$> jhome -v 1.6    #switches to java 1.6

심판 : https://gist.github.com/kenglxn/1843d552dff4d4233271


jenv를 사용하는 것은 쉬운 방법입니다.

1. jenv 설치

    curl -s get.jenv.io | 세게 때리다

2. jenv 구성

    cd ~ / .jenv / candidates /
    mkdir 자바
    cd 자바
    mkdir 1.7
    mkdir 1.8

3. jdk 경로 심볼릭 링크

    ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin ~ / .jenv / candidates / java / 1.7
    ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin ~ / .jenv / candidates / java / 1.8

4. 모든 준비 완료

스위치 명령 :

jenv는 자바 1.8 사용

기본값으로 설정:

jenv 기본 자바 1.7


약간 까다 롭지 만 OS X 10.9 (Mavericks)에 Java 설치에 설명 된 단계를 따르십시오 . 기본적으로 별칭을 java.

단계별 :

JDK 1.7을 설치 한 후 sudo ln -snf링크를 현재로 변경하려면이 를 수행해야합니다 java. 이렇게하려면 터미널을 열고 다음 명령을 실행하십시오.

sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents \
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK

jdk1.7.0_51.jdk설치 한 SDK 버전에 따라 디렉토리 가 변경 될 수 있습니다.

이제 설치된 JAVA_HOME위치를 가리 키도록 설정해야합니다 jdk_1.7.0_xx.jdk. 터미널을 다시 열고 다음을 입력하십시오.

export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home"

파일에 export JAVA_HOME줄을 추가 .bashrc하여 터미널에 Java를 영구적으로 사용할 수 있습니다.


JRE뿐만 아니라 JDK 설치

/usr/libexec/java_home -v 1.8

준다

/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home

다음

touch .bash_profile

open -a TextEdit.app .bash_profile

텍스트 편집기는 채울 수있는 빈 페이지를 표시합니다.

문서에 추가 : export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home

터미널에서 :

export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"

다음 명령을 시도하십시오.

javac -version

다음을 출력해야합니다.

javac 1.8.0_111

tl; dr

다음 행을 추가하십시오.

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

파일에

~/.bash_profile

(jdk1.8.0_144.jdk를 다운로드 한 버전으로 대체)

그때 source ~/.bash_profile


jenv를 사용하면 Java 환경 관리자와 같습니다. 사용하기 쉽고 깨끗합니다.

Mac의 경우 다음 단계를 따르십시오.

brew install jenv

git clone https://github.com/gcuisinier/jenv.git ~/.jenv

설치 : bash를 사용하는 경우 다음 단계를 따르십시오.

$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile

echo 'eval "$(jenv init -)"' >> ~/.bash_profile

$ exec $SHELL -l

원하는 버전의 JVM을 jenv에 추가하십시오.

jenv add /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

jenv add /System/Library/Java/JavaVirtualMachines/1.8.0.jdk/Contents/Home

설치된 버전을 확인하십시오.

jenv versions

사용하려는 Java 버전을 설정하십시오.

jenv global oracle64-1.6.0

function setjdk() {
  if [ $# -ne 0 ]; then
    removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'
    if [ -n "${JAVA_HOME+x}" ]; then
      removeFromPath $JAVA_HOME
    fi
    export JAVA_HOME=`/usr/libexec/java_home -v $@`
    export PATH=$JAVA_HOME/bin:$PATH
  fi
}

에 넣고 당신의 ~ / .profile에 등 같은 터미널에서 사용 setjdk 1.8, setjdk 1.7, setjdk 9등 등 ...

없는 경우 removeFromPath다음과 같습니다.

function removeFromPath() { export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;") }


~/.zshenv파일 에 다음 명령을 추가 하십시오

export JAVA_HOME=`/usr/libexec/java_home -v 1.8` 

Apple의 공식 java_home (1) 매뉴얼 페이지에서 :

**USAGE**

   /usr/libexec/java_home  helps  users  set a $JAVA_HOME in their login rc files, or provides a way for
   command-line Java tools to use the most appropriate JVM which can satisfy a minimum version or archi-
   tecture  requirement.  The --exec argument can invoke tools in the selected $JAVA_HOME/bin directory,
   which is useful for starting Java command-line tools from launchd plists without hardcoding the  full
   path to the Java command-line tool.

   Usage for bash-style shells:
          $ export JAVA_HOME=`/usr/libexec/java_home`

   Usage for csh-style shells:
          % setenv JAVA_HOME `/usr/libexec/java_home`

JDK 스위치 스크립트

위의 @Alex의 답변을 수정하고 Java 9의 코드를 수정하기 위해 다음을 작성했습니다.

$ cat ~/.jdk
#!/bin/bash

#list available jdks
alias jdks="/usr/libexec/java_home -V"
# jdk version switching - e.g. `jdk 6` will switch to version 1.6
function jdk() {
  echo "Switching java version $1";

  requestedVersion=$1
  oldStyleVersion=8
  # Set the version
  if [ $requestedVersion -gt $oldStyleVersion ]; then
    export JAVA_HOME=$(/usr/libexec/java_home -v $1);
  else
    export JAVA_HOME=`/usr/libexec/java_home -v 1.$1`;
  fi

  echo "Setting JAVA_HOME=$JAVA_HOME"

  which java
  java -version;
}

Java 8로 전환

$ jdk 8
Switching java version 8
Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
/usr/bin/java
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

Java 9로 전환

$ jdk 9
Switching java version 9
Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
/usr/bin/java
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)

그래도 설정할 수 없다면. 이 명령을 사용합니다.

수출 JAVA_HOME =/usr/libexec/java_home -v 1.8

이걸 사용해야합니다.

수출 JAVA_HOME =$(/usr/libexec/java_home -v 1.8)

확실히 작동합니다.


먼저 환경 변수를 어디에 저장합니까?

  1. 이맥스
  2. bash_profile
  3. zshrc 파일

환경 변수 설정 단계 :-

  1. JAVA에서 jdk 다운로드
  2. 더블 클릭으로 설치
  3. 이제 파일에 환경 변수를 설정하십시오.

    ㅏ. 들어 emacs.profile 이 사용할 수있는 링크를 또는 아래 스크린 샷 참조

여기에 이미지 설명 입력

비. ZSH 프로필 설정의 경우-

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

2. source ~/.zshrc - Restart zshrc to reflect the changes.

3. echo $JAVA_HOME - make sure path is set up properly 
   ----> /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home

4. java -version 

   -->  java version "1.8.0_112"  Java(TM) SE Runtime Environment (build 1.8.0_112-b16)Java HotSpot(TM) 64-Bit Server VM (build 25.112-b16, mixed mode)

모든 설정 이제 JAVA 버전을 쉽게 업그레이드하거나 저하시킬 수 있습니다.


물고기를 사용하고 있고 Mac을 사용 중이고 JDK 사이를 전환하려면 아래에서 Mac에서 나를 위해 작동합니다.

@kenglxn의 대답이 나를 위해 작동하지 않았고 bcos가 글로벌 인 -g를 설정하지 않았다는 것을 알았습니다!

~ / .config / fish / config.fish 아래에 넣으십시오.

alias j8="jhome  -v 1.8.0_162"
alias j9="jhome  -v 9.0.1"

function jhome
    set -g -x JAVA_HOME (/usr/libexec/java_home $argv)
    echo "JAVA_HOME:" $JAVA_HOME
    echo "java -version:"
    java -version
end

funcsave jhome

설치 한 버전 / 부 버전을 확인하려면 다음을 수행하십시오.

/usr/libexec/java_home -V                                                                              579ms  Wed 14 Feb 11:44:01 2018
Matching Java Virtual Machines (3):
    9.0.1, x86_64:  "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
    1.8.0_162, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
    1.8.0_121, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home

여러 버전이 있고 특정 버전을 사용하여 무언가를 실행하려면 다음 예제를 사용하십시오.

/usr/libexec/java_home -v 1.7.0_75 --exec java -jar you-file.jar

@markhellewell 답변을 기반으로 나는 당신을 위해 그것을 할 몇 가지 별칭 함수를 만들었습니다. 쉘 시작 파일에 추가하십시오.

#list available jdks
alias jdks="/usr/libexec/java_home -V"
# jdk version switching - e.g. `jdk 6` will switch to version 1.6
function jdk() { 
  echo "Switching java version"; 
  export JAVA_HOME=`/usr/libexec/java_home -v 1.$1`; 
  java -version; 
}

https://gist.github.com/Noyabronok/0a90e1f3c52d1aaa941013d3caa8d0e4


Linux (Ubuntu / Mint mate) 에서 수행하는 방법은 다음과 같습니다 . Mac도 비슷하게 수행 할 수 있습니다.


설치 및 구성

단계 :

  • [기본-부품]
  • Download jdk (the .tgz file) by hand.
  • Uncompress & rename properly, at a proper location.
    e.g /mnt/star/program/java/jdk-1.8
  • Make a soft link, which will be changed to switch java version later.
    e.g ln -s /mnt/star/program/java/jdk-1.8 /mnt/star/program/java/java
    Thus /mnt/star/program/java/java is the soft link.
  • Set JAVA_HOME in a start script.
    Could use file like /etc/profile.d/eric.sh, or just use ~/.bashrc.
    e.g JAVA_HOME=/mnt/star/program/java/java
  • Then open a new bash shell. java -version should print the java version.
  • [More version - part]
  • Download & install more Java version, as need, similar as above steps.
    e.g
    /mnt/star/program/java/jdk-11
  • [Switch - part]
  • In ~/.bashrc, define variable for various Java version.
    e.g
    _E_JAVA_HOME_11='/mnt/star/program/java/jdk-11'
    _E_JAVA_HOME_8='/mnt/star/program/java/jdk-8'
    # dir of default version,
    _E_JAVA_HOME_D=$_E_JAVA_HOME_8
  • In ~/.bashrc, define command to switch Java version.
    e.g
    ## switch java version,
    alias jv11="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_11 $JAVA_HOME"
    alias jv8="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_8 $JAVA_HOME"
    # default java version,
    alias jvd="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_D $JAVA_HOME"
    alias jv="java -version"
  • In terminal, source ~/.bashrc to make the changes take effect.
  • Then could switch using the defined commands.

Commands - from above config

Commands:

  • jv11
    Switch to Java 11
  • jv8
    Switch to Java 8
  • jvd
    Switch to default Java version, which is denoted by _E_JAVA_HOME_D defined above.
  • jv
    Show java version.

Example output:

eric@eric-pc:~$ jv
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

eric@eric-pc:~$ jv11
eric@eric-pc:~$ jv
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

eric@eric-pc:~$ jvd
eric@eric-pc:~$ jv
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

eric@eric-pc:~$ 

Mechanism

  • It switch by changing the soft link, which is used as JAVA_HOME.

Tips

  • On my machine when install jdk by hand, I keep the minor version, then make a soft link with the major version but without the minor version.
    e.g
    // this is the actual dir,
    jdk1.8.0_191

    // this is a soft link to jdk1.8.0_191
    jdk-8

    // this is a soft link to jdk-8 or jdk-11
    java

  • I define command alias in ~/.bashrc, but define variable in a separate file.
    I am using ~/.eric_var to define the variables, and ~/.bashrc will source it (e.g source $HOME/.eric_var).


An easy way to include a separately installed JDK in the list given by /usr/libexec/java_home -V is to symlink the directory as follows:

sudo ln -s path/to/jdk /Library/Java/JavaVirtualMachines/jdk-[some-identifier].jdk

For example, to register the JDK included with Android Studio (1.8.0_152 at the time of writing), use:

sudo ln -s /Applications/Android\ Studio.app/Contents/jre/jdk /Library/Java/JavaVirtualMachines/jdk-android-studio.jdk

Now java_home will list the JDK under Matching Java Virtual Machines and you can select it as described above.


Four easy steps using terminal for people who uses the default process.. :)

  1. echo $JAVA_HOME gives you current java home
  2. cd /Library/Java/JavaVirtualMachines/ will take you to the folder where u normally install jdks (It might be different for your machines)
  3. ls shows you available folders (normally it will have the version numbers, for eg: jdk1.8.0_191.jdk openjdk-11.0.2.jdk)
  4. export JAVA_HOME='/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home' will change the java home..

This tool will do the work for you:

http://www.guigarage.com/2013/02/change-java-version-on-mac-os/

It's a simple JavaOne that can be used to define the current Java Version. The version can be used in a shell that is opened after a version was selected in the tool.


TOO EASY SOLUTION: What a headache - this was a quick easy solution that worked for me.

Mac OS Sierra Version 10.12.13

  1. Use the shortcut keys: CMD+SHIFT+G - type in "/Library/"

  2. Find the JAVA folder

  3. Right Click Java Folder = Move to Trash (Password Required)

  4. Install: Java SE Development Kit 8 jdk-8u131-macosx-x64.dmg | Download Javascript SDK

  5. Make sure the new JAVA folder appears in /LIBRARY/
  6. Install Eclipse | Install Eclipse IDE for Java Developers
  7. Boom Done

참고 URL : https://stackoverflow.com/questions/21964709/how-to-set-or-change-the-default-java-jdk-version-on-os-x

반응형