/ usr / libexec / java_home에서 반환 된 Mac OS의 기본 Java VM을 어떻게 변경할 수 있습니까?


108

(이것이 SU에서 계속되어야하는지 확신 할 수 없었습니다. 마이그레이션은 확실히 옵션이지만 더 많은 프로그래머가 여기에서 질문을 읽고 여기에 있습니다).

Mac OS X 10.8.4를 실행 중이며 Apple의 JDK 1.6.0_51과 Oracle의 JDK 1.7.0_25가 설치되어 있습니다. 최근에 필요한 일부 시험판 소프트웨어에 대해 Oracle의 1.8 프리뷰 JDK를 설치했습니다. 이제 / usr / libexec / java_home을 실행하면 다음과 같이 표시됩니다.

$ /usr/libexec/java_home -V
Matching Java Virtual Machines (4):
    1.8.0, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home
    1.7.0_25, x86_64:   "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home
    1.6.0_51-b11-457, x86_64:   "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    1.6.0_51-b11-457, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

큰.

그러나 다음을 실행합니다.

$ java -version

보고:

java version "1.8.0-ea"

즉, Java의 기본 버전은 현재 시험판 버전이므로 일부 "일반"패키지 (제 경우에는 VisualVM)가 중단됩니다.

JAVA_HOME응용 프로그램을 시작하면 명령 줄 (예 :)에서 시작할 때도 환경 변수가 무시되기 때문에 설정할 수 없습니다 $ open /Applications/VisualVM.app.

그렇다면 내 JVM 주문 기본 설정을 전역 적으로 설정할 수있는 편집 할 수있는 파일이 있습니까?

(단순히 작동하지 않기 때문에 Java 환경 설정 패널을 시작하라고 말하지 마십시오. 유용한 정보가 포함되어 있지 않으며 내가 설치 한 4 개의 JVM 중 하나만 나열됩니다.)

업데이트 :

Oracle JVM은 /Library/Java/JavaVirtualMachines. JDK 1.8 디렉토리의 이름을 바꾸어도 jdk1.8.0.jvm.xyz아무것도 변경되지 않습니다. java_home여전히 올바른 위치에 있으며 / usr / bin / java를 실행하면 여전히 1.8 JVM이 실행됩니다. 이것은 synlink 등의 문제가 아닙니다.

비슷한 질문에 대한 답변

이 답변 은 java_home에서 Java 버전을 제거하는 해킹의 양을 제공 하지만 java_home이 기본값을 선택 하는 방법 과 사용자가 비파괴 적으로 설정할 수 있는지 여부에 대한 질문에는 여전히 답변하지 않습니다 .


'which java'를 입력하고 이동 경로를 따릅니다. /usr/bin/java단지 심볼릭 링크
브라이언 로치

11
거기 있었어. /usr/bin/java를 가리 킵니다 /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java. Versions디렉토리는 1.8.0 JDK에 대한 심볼릭 링크가 포함되어 있지 않습니다. 대신 유용하게라는 디렉토리가 들어 A있는 Current가리키는합니다. A"JAVA_HOME. 명령 이있는 하위 디렉토리 Commandsjava있지만 누가 무엇을 알고 있는지를 수행하는 불투명 한 범용 바이너리입니다. java_home사용할 JVM을 결정하기 위해 , 등을 사용하는 것 같습니다.
Christopher Schultz

2
주제에서 벗어난 경우 닫는 대신 마이그레이션하십시오. FWIW, 이것은 "프로그래머가 일반적으로 사용하는 소프트웨어 도구"에 관한 것이므로 "주제를 벗어난"닫기는 명확하지 않습니다.
Christopher Schultz

네, 답답합니다! 모두를 위해 JDK 하나만 원하거나 1.7과 1.8 사이를 쉽게 전환 할 수있는 2 개를 원합니다.
Brian

1
이 질문에 유용한 SO 답변을 찾았습니다. stackoverflow.com/a/44169445/2987755
dkb

답변:


89

JAVA_HOME당신이 할 수있는 최선 이라고 생각 합니다. 명령 줄 도구 는 해당 환경 변수를 좋아 java하고 javac존중하므로 명령 줄 도구가 Java 7을 사용하도록하기 위해 /usr/libexec/java_home -v '1.7*'입력 할 적절한 값을 제공하는 데 사용할 수 있습니다 JAVA_HOME.

export JAVA_HOME="`/usr/libexec/java_home -v '1.7*'`"

그러나 표준 더블 클릭 가능 애플리케이션 번들은 아래 /Library/Java에 설치된 JDK를 전혀 사용하지 않습니다 . .appApple을 사용하는 이전 스타일 번들 JavaApplicationStub은에서 Apple Java 6을 사용 하며 번들 JRE없이 AppBundler로/System/Library/Frameworks 빌드 된 새로운 스타일 의 번들 은 스터브 코드에 하드 코딩되어 변경할 수없는 "공개"JRE를 사용합니다. 두 개의 다른 공용 JRE를 동시에 설치할 수 없습니다./Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home


편집 : VisualVM을 구체적으로 살펴 봤습니다 . 다운로드 페이지 에서 "애플리케이션 번들"버전을 사용하고 있다고 가정 하고이 특정 앱은 AppBundler 애플리케이션이 아니라 기본 실행 파일이 번호를 호출하는 셸 스크립트입니다. 다른 쉘 스크립트와 다양한 구성 파일을 읽습니다. 기본적으로 /Library/Java7u10 이상인 경우 최신 JDK를 선택 하거나 Java 7 설치가 업데이트 9 이하인 경우 Java 6을 사용합니다. 그러나 쉘 스크립트에서 로직을 풀면 구성 파일을 사용하여 특정 JDK를 지정할 수있는 것처럼 보입니다.

줄을 포함하는 텍스트 파일을 만듭니다 ~/Library/Application Support/VisualVM/1.3.6/etc/visualvm.conf(1.3.6을 사용중인 VisualVM의 버전으로 대체).

visualvm_jdkhome="`/usr/libexec/java_home -v '1.7*'`"

그러면 8 대신 Java 7을 선택하게됩니다.


이것은 내 시스템에 해당되지 않는 것 같습니다. JDK 1.8이 설치되기 전에 VisualVM을 시작하면 작동했습니다. JDK1.8 이후 VisualVM은 스플래시 화면을 표시 한 다음 종료됩니다. / Library / Java에서 JDK1.8 디렉토리를 이동하면 실행 기능이 복원됩니다.
Christopher Schultz

@ChristopherSchultz VisualVM 번들을 살펴본 결과 일반 앱 번 들러 응용 프로그램이 아님이 밝혀졌습니다. 가능한 해결 방법은 내 편집을 참조하십시오.
Ian Roberts

죄송합니다. 편집하기 전에 이전 댓글을 작성했습니다. 이 기술을 사용하여 VisualVM을 실행하도록 체크 아웃 할 것이지만 보편적으로 적용 할 수는 없습니다. Eclipse, JasperReports iReport 등과 같이 실행되는 다른 Java 기반 소프트웨어가 많이 있는데, 모두 이것에 의해 영향을받을 가능성이 있습니다. 나는 차라리 JDK1.8 디렉토리를 다른 곳으로 옮기고 JAVA_HOME과 함께 실제로 필요한 (몇 가지) 시간 동안 명시 적으로 사용하는 것이 좋습니다.
Christopher Schultz

1
그래, 당신이 옳다 JAVA_HOME.가는 길이며 일반적으로 가장 좋은 방법은 다른 경우에 필요한 부 버전을 지정하는 것입니다. 분해를 바탕으로, 그것은 당신이 할 수있는 밝혀 export JAVA_VERSION=1.7하려면 java_home대신 JDK8의 JKD7를 보여주는 기본적를하지만 휴식 것을 java_home -v 1.6때문에 java-home때문에 상호 시켰음 제약 추가 제약으로 해석을하고 포기하고 단지도에 기본 1.8로 간다 --failfast옵션을 선택합니다.
andrewdotn 2014 년

2
시스템 환경 설정 Java 제어판이 쉘 스크립트 / 명령에 의존하는 대신 선택할 목록을 표시하지 않는 이유를 이해할 수 없습니다. 나는 이것이 브라우저에서 실행되는 애플릿만을위한 것이라고 생각합니다 ...
JGFMK

51

나도 거기에 있었고 /usr/libexec/java_home작동 방식을 어디에서나 검색 했지만 나열되는 사용 가능한 Java 가상 머신을 결정하는 방법에 대한 정보를 찾을 수 없었습니다.

나는 약간의 실험을 해 보았고 단순히 a를 실행하고 거기에서 찾은 모든 런타임 ls /Library/Java/JavaVirtualMachines을 검사 한다고 생각합니다 ./<version>/Contents/Info.plist.

그런 다음 Info.plist에 포함 된 키를 기준으로 내림차순 으로 정렬하고 JVMVersion기본적으로 첫 번째 항목을 기본 JVM으로 사용합니다.

우리가 할 수있는 유일한 일은 plist를 변경하는 것입니다. sudo vi /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Info.plist그런 다음 JVMVersion을에서 1.8.0와 같이 상단이 아닌 하단으로 정렬하는 다른 것으로 수정합니다 !1.8.0.

다음과 같은 것 :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    ...
    <dict>
            ...
            <key>JVMVersion</key>
            <string>!1.8.0</string>   <!-- changed from '1.8.0' to '!1.8.0' -->`

그런 다음 목록 상단에서 마술처럼 사라집니다.

/usr/libexec/java_home -verbose
Matching Java Virtual Machines (3):
    1.7.0_45, x86_64:   "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home
    1.7.0_09, x86_64:   "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home
    !1.8.0, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home

이제 로그 아웃 / 로그인 후 다음을 수행해야합니다.

java -version
java version "1.7.0_45"

:-)

물론 지금은 다른 문제가 발생했는지 또는 1.8.0-ea 버전의 Java가 여전히 제대로 작동하는지 알 수 없습니다.

이 작업을 수행하지 말고 1.8.0을 제거하십시오.

그러나 지금까지 이것은 나를 위해 일했습니다.


이것은 나를 위해 일했습니다. MacOS에서 Idea Sbt 플러그인이 계속 작동하도록하려면이 조정을 사용해야했습니다. 나는 그것을 나의 블로그 agilebuild.blogspot.com/2014/02/
antoine

이것은 작동하지만 약간 까다로워 보이고 표준 작업 절차처럼 보이지 않을 수 있습니다. 더 나은 접근 방법이 있으면 방황합니다.
Weibo Li

나는 여전히 이것에 대한 해결책을 원하지만 Intellij가 사용할 JDK를 설정하기 위해 이것을 zshenv에 추가했습니다. export IDEA_JDK = /usr/libexec/java_home -v 1.7. 나는 ... 나는 JAVA_HOME을 위해 동일을 할 것 같아요
데이비드 레스 닉

이 답변을 사용하여 Java 9에서 두 번 클릭 응용 프로그램을 시작하는 것을 피할 수 있습니다 (Keystore Store 탐색기의 문제로 인해). 감사!
Nicolas Henneaux

2
macOS에 JDK 및 JRE 설치 에서 발췌 : macOS 2012-006 용 Java를 설치 한 후 설치된 최신 JDK /usr/bin/java를 찾고 .NET의 모든 Java 관련 명령 줄 도구에이를 사용 합니다. /usr/bin
Jeremy Kao

7

사실 꽤 쉽습니다. JavaVirtualMachines 폴더에 다음이 있다고 가정 해 보겠습니다.

  • jdk1.7.0_51.jdk
  • jdk1.8.0.jdk

1.8이 기본값이라고 가정하고 새 폴더 (예 : 'old')를 추가하고 기본 jdk 폴더를 새 폴더로 이동합니다. 수행 java -version, 등 짜잔 다시 1.7을!


1
믿을 수, 그것은 ... 감사 맥 OS 모하비 일이지만
마이클 Dobi Dobrzański

5

소매를 감아도 괜찮다면 매우 간단합니다 ... / Library / Java / Home 은 JAVA_HOME의 기본값이며 다음 중 하나를 가리키는 링크 일뿐입니다.

  • /System/Library/Java/JavaVirtualMachines/1.?.?.jdk/Contents/Home
  • /Library/Java/JavaVirtualMachines/jdk1.?.?_??.jdk/Contents/Home

그래서 JAVA_HOME의 내용을 변경 하지 않고 기본 JVM / JDK 버전 변경하고 싶었습니다 ... / Library / Java / Home은 현재 JVM / JDK의 표준 위치이며 그게 제가 보존하고 싶은 것입니다 ... 최소한의 부작용으로 물건을 바꾸는 가장 쉬운 방법입니다.

사실 정말 간단합니다. java -version으로 표시되는 Java 버전을 변경하려면 다음 버전 만 있으면됩니다.

cd /Library/Java
sudo rm Home
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home ./Home

나는 시간이 걸리지 않았지만 / usr / libexec / java_home 및 ln을 사용하여 위의 심볼릭 링크를 다시 가리키는 매우 간단한 쉘 스크립트는 어리석은 쉽게 만들 수 있습니다 ...

/ Library / Java / Home이 가리키는 위치를 변경하면 ... 올바른 결과를 얻습니다.

cerebro:~ magneto$ java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27) Java HotSpot(TM)
64-Bit Server VM (build 25.60-b23, mixed mode)

1
이것은이 물건이 작동하는 방식이 아닙니다. /Library/Java/Home실제로 심볼릭 링크이지만, /System/Library/Frameworks/JavaVM.framework/Home최종적으로 여러분을 이끌어내는 심볼릭 링크의 큰 혼란 속에있는 자체를 가리 킵니다 . 시작할 올바른 JRE를 결정하는 마법의 명령입니다. /usr/libexec/java_home이 마법 과 도 연결됩니다. 따라서 심볼릭 링크를 교체하고 단일 JRE를 가리 키기 만하면 모든 것을 중단 할 수 있지만 매번 업데이트해야합니다. 분명히 set_preferred_jvm_version비슷한 명령은 없습니다 .
Christopher Schultz

1
하지만이 기술의 장점은 JAVA_HOME어디에도 설정할 필요가 없다는 것 입니다. 이 기술을 사용하여 "선호하는"Java VM과 함께 Java 기반 프로그램이 시작되는지 확인합니다. 나는 그것이 될 것이라고 생각하지만 그것은 매우 취약합니다.
Christopher Schultz

글쎄요 요즘 나는 이것을 가지고 있습니다 .bash_profile:export JAVA_HOME=`/usr/libexec/java_home -v 12`
jrypkahauer

아이콘을 두 번 클릭하면 작동하지 않습니다. 명령 줄에서만 작동하는 솔루션은 솔루션이 아닙니다.
Christopher Schultz

3

Java 7에 대한 Oracle의 제거 지침 이 저에게 효과적이었습니다.

발췌 :

JDK 제거 JDK를 제거하려면 관리자 권한이 있어야하며 루트로 또는 sudo (8) 도구를 사용하여 제거 명령을 실행해야합니다.

/ Library / Java / JavaVirtualMachines로 이동하여 이름이 다음 형식과 일치하는 디렉토리를 제거하십시오. *

/Library/Java/JavaVirtualMachines/jdk<major>.<minor>.<macro[_update]>.jdk

예를 들어 7u6을 제거하려면 다음을 수행하십시오.

% rm -rf jdk1.7.0_06.jdk


2
이 질문은 해제 설치에 대해 아니었다 ... 그것은 그 하나에서 "차"JVM을 선택 관하여이었다가 설치되어 ...
크리스토퍼 슐츠

3

조금 늦었지만 이것은 Mac OSX에서 진행중인 문제이므로 ...

내가 찾은 가장 간단한 해결책은 Apple이 설치하는 OpenJDK 항목을 간단히 제거하는 것입니다. Mac OSX 업데이트가 도착할 때마다 설치되며 다시 제거해야합니다.

이것은 Java를 사용하여 Mac에서 Google App Engine 용 앱을 개발하는 경우 매우 잘 작동합니다. OpenJDK가 제대로 작동하지 않으며 Mac OSX Yosemite 업그레이드와 함께 제공되는 Java 버전으로 인해 모든 배포에서 App Engine 용 Eclipse 플러그인이 "읽기 시간 초과"라는 유용한 오류와 함께 비정상 종료됩니다.


1
웃기다 ... 나는 애플이이 시점에서 자바를 완전히 제거했다고 생각했다. Apple의 Java 1.6 JVM을 수동으로 제거한 기억이 없으며 더 이상 여기에 없습니다. 어쨌든 이것은 설치된 선택 사항이 주어지면 선호하는 JVM을 지정하는 원래 문제를 실제로 수정하지 않습니다.
Christopher Schultz 2014

당신이 올바른지. 질문에 대한 답이 아닙니다. 사용중인 JVM을 제거하면 목록에있는 '다음'항목이 사용됩니다. 아마도 도움이 될 것입니다.
Mo'in

이것이 jdk 8 설치를 실행 한 후 JavaVirtualMachines 폴더에 표시되지 않는 이유를 설명합니까? 내가 설치 한 버전에 관계없이 "1.6.0.jdk"만 표시됩니다.
whyoz

@whyoz 방금 osx 10.10.2에 jdk-8u31-macosx-x64를 설치했고 VM은 예상대로 JavaVirtualMachines 폴더에 설치되었습니다.
Mo'in Creemers 2015

Parallels를 우연히 실행하고 있습니까? Parallels의 Windows쪽에 설치했고 예상대로 8u31을 설치했습니다. Mac 쪽이 아닙니다 ..
whyoz

3

나는 "jenv"와 "JAVA_HOME"설정과 같은 다른 것들을 성공적으로 테스트하지 않았다. 이제 나는 다음 솔루션으로 끝납니다.

function setJava {
    export JAVA_HOME="$(/usr/libexec/java_home -v $1)"
    launchctl setenv JAVA_HOME $JAVA_HOME
    sudo ln -nsf "$(dirname ${JAVA_HOME})/MacOS" /Library/Java/MacOS 
    java -version
}

(~ / .bashrc 또는 ~ / .bash.profile 또는 ~ / .zshrc에 추가됨)

그리고 그렇게 부르십시오.

setJava 1.8

java_home은 잘못된 입력을 처리합니다. 그래서 당신은 잘못을 할 수 없습니다. Maven 및 기타 항목은 이제 올바른 버전을 선택합니다.


1

소스를 사용할 수 없기 때문에 실제로 디스어셈블러에서 이것을 조금 보았습니다.

/ usr / bin / java 및 / usr / libexec / java_home은 모두 JavaLaunching.framework를 사용합니다. JAVA_HOME 환경 변수는 실제로 / usr / bin / java 및 친구들이 먼저 확인합니다 (그러나 / usr / libexec / java_home은 아님). 프레임 워크는 JAVA_VERSION 및 JAVA_ARCH 환경 변수를 사용하여 사용 가능한 JVM을 필터링합니다. 따라서 기본적으로 :

$ /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
    11.0.5, x86_64: "Amazon Corretto 11"    /Library/Java/JavaVirtualMachines/amazon-corretto-11.jdk/Contents/Home
    1.8.0_232, x86_64:  "Amazon Corretto 8" /Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/amazon-corretto-11.jdk/Contents/Home

그러나 JAVA_VERSION을 설정하면 기본값을 재정의 할 수 있습니다.

$ JAVA_VERSION=1.8 /usr/libexec/java_home
/Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home

또한 JAVA_LAUNCHER_VERBOSE = 1을 설정하여 / usr / bin / java 및 / usr / libexec / java_home을 사용하여 검색 경로, 발견 된 JVM 등에 대한 추가 디버그 로깅을 볼 수 있습니다.

과거에 JavaLaunching.framework는 실제로 선호하는 JVM 순서를 설정하기 위해 환경 설정 시스템 (com.apple.java.JavaPreferences 도메인 아래)을 사용 하여 기본 JVM을 PlistBuddy로 설정할 수있었습니다. 했습니다. 최신 버전의 macOS에서는 코드가 제거되었습니다. 환경 변수가 유일한 방법 인 것 같습니다 (JDK 번들 자체에서 Info.plist를 편집하는 것 제외).

기본 환경 변수 설정은 물론 세션 수준에서 설정해야하는 경우 .profile 또는 launchd 를 통해 수행 할 수 있습니다.


이것은 훌륭한 정보입니다, 댄. 사용 .profile은 내 사용 사례 (예 : 런치 패드에서 응용 프로그램 시작)에 유용하지 않지만 팁 launchd은 좋은 것입니다. Java의 최근 버전 관리 광기는 여러 세대의 (개인) 신뢰 수준으로 동시에 여러 세대의 Java를 설치했음을 의미하므로 시도해 보겠습니다.
Christopher Schultz

-2

편집 :이 정보는 다른 Java 앱이 아니라 특히 visualvm에 대한 것입니다.

다른 사람들이 언급했듯이 visualvm.conf를 수정해야합니다.

Mac 용 JvisualVM 1.3.6 최신 버전의 경우 설치 디렉토리가 변경되었습니다.

현재 /Applications/VisualVM.app/Contents/Resources/visualvm/etc/visualvm.conf에 있습니다.

그러나 이것은 VisualVM을 설치 한 위치에 따라 다를 수 있습니다. VisualVM을 시작하는 가장 쉬운 방법은 VisualVM을 시작한 다음 다음을 사용하여 프로세스를 살펴 보는 것입니다.

ps -ef | grep VisualVM

다음과 같은 내용이 표시됩니다.

... -Dnetbeans.dirs = / Applications / VisualVM.app / Contents / Resources / visualvm / visualvm ...

netbeans.dir 속성을 가져 와서 디렉토리를 검색하면 etc 폴더를 찾을 수 있습니다.

visualvm.conf에서이 줄의 주석 처리를 제거하고 경로를 jdk로 변경합니다.

visualvm_jdkhome="/path/to/jdk"

또한 visualvm의 속도가 느려지고 메모리가 많은 경우 사용 가능한 메모리 양을 크게 늘리고 서버 모드에서 실행하는 것이 좋습니다.

visualvm_default_options="-J-XX:MaxPermSize=96m -J-Xmx2048m -J-Xms2048m -J-server -J-XX:+UseCompressedOops -J-XX:+UseConcMarkSweepGC -J-XX:+UseParNewGC -J-XX:NewRatio=2 -J-Dnetbeans.accept_license_class=com.sun.tools.visualvm.modules.startup.AcceptLicense -J-Dsun.jvmstat.perdata.syncWaitMs=10000 -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.d3d=false"

나쁜 조언 : 특정 응용 프로그램에 대한 시작 스크립트를 수정하면 가능성이 응용 프로그램을 중단합니다 운영 체제의 기본 JVM을 변경의 원래 문제가 해결되지 않습니다.
Christopher Schultz 2013

불행히도 다른 사람들이 언급했듯이 jvisualvm은 jvm을 선택하는 표준 방법을 사용하지 않습니다. 이 앱에 대한 유일한 솔루션입니다.
Celandro

내 답변 에서 언급했듯이 애플리케이션 번들 자체 내부를 수정할 필요가 없으므로 앱은 ~/Library/Application Support/VisualVM/1.3.6/etc/visualvm.conf.
Ian Roberts

-2

비슷한 상황이었고 다음 프로세스가 저에게 효과적이었습니다.

  1. 터미널에 다음을 입력하십시오.

    vi ~/.profile
  2. 그런 다음이 줄을 파일에 추가하고

    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk<version>.jdk/Contents/Home

    여기서 version은 1.7.0_25와 같이 컴퓨터에있는 버전입니다.

  3. 편집기를 종료하고 다음 명령을 입력하여 적용하십시오.

    source ~/.profile 

그런 다음 java -version을 입력하여 결과를 확인하십시오.

    java -version 

.profile이란 무엇입니까? 출처 : http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile--mac-30515

.profile 파일은 숨겨진 파일입니다. 프로필 파일을 소유 한 사용자가 로그인 할 때 실행할 명령을 시스템에 알려주는 선택적 파일입니다. 예를 들어 내 사용자 이름이 bruno이고 / Users / bruno /에 .profile 파일이있는 경우 모든 내용 로그인 과정에서 실행됩니다.


Launchpad에서 VisualVM을 시작할 때는 작동하지 않습니다. JAVA_HOME 환경 변수를 설정할 수 있으므로 명령 줄에서 시작하는 것은 문제가되지 않습니다.
Christopher Schultz 2014

-2

MacOS는 / usr / libexec / java_home을 사용하여 현재 Java 버전을 찾습니다. 우회하는 한 가지 방법은 위의 @ void256에서 설명한대로 plist 파일을 변경하는 것입니다. 다른 방법은 java_home의 백업을 가져 와서 코드가
echo $ JAVA_HOME 인 자체 스크립트 java_home으로 바꾸는 것입니다.

이제 ~ / .bash_profile에 다음 명령을 추가하여 JAVA_HOME을 원하는 SDK 버전으로 내 보냅니다. export JAVA_HOME = "/ System / Library / Java / JavaVirtualMachines / 1.6.0.jdk / Contents / Home"launchctl setenv JAVA_HOME $ JAVA_HOME /// 환경 변수를 전역으로 설정

위의 명령을 실행하려면 명령 소스 ~ / .bash_profile을 실행하십시오.

JAVA_HOME을 변경해야 할 때마다 ~ / .bash_profile 파일에서 JAVA_HOME 값을 재설정 할 수 있습니다.


환경 변수에 의존하는 것은 작동하지 않습니다. 요점은 LaunchPad 등을 통해 시작된 응용 프로그램에는 환경 설정이 없다는 것입니다. 위의 plist 해킹은 실제로 원하는 결과를 달성한다는 점에서 "최고"해킹처럼 보입니다. 아직 단점이 있는지는 잘 모르겠습니다. 동일한 문제가있는 @Tony의 답변을 참조하십시오.
Christopher Schultz

-3

기본 Java 버전 양식 1.6 *을 1.7 *로 변경하고 싶었습니다. 나는 다음 단계를 시도했고 그것은 나를 위해 일했습니다.

  • / usr / bin 아래에서 "java"링크 제거
  • 새 위치를 가리키며 다시 만들었습니다.

ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/bin/java java

  • "java -version"으로 확인

Java 버전 "1.7.0_51"
Java (TM) SE 런타임 환경 (빌드 1.7.0_51-b13)
Java HotSpot (TM) 64 비트 서버 VM (빌드 24.51-b03, 혼합 모드)


질문에 대답하지 않습니다 /usr/libexec/java_home. 의 동작에 영향을주지 않습니다 .
Christopher Schultz 2014
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.