source

/usr/libexec/java_home에서 반환된 Mac OS의 기본 Java VM을 변경하는 방법

gigabyte 2022. 9. 17. 09:56
반응형

/usr/libexec/java_home에서 반환된 Mac OS의 기본 Java VM을 변경하는 방법

(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 Preferences Panel을 시작하라는 말은 하지 말아주세요.이 패널에는 도움이 되는 것은 포함되어 있지 않고, 인스톨 한 4개의 JVM 중 1개만 표시됩니다).

업데이트:

JVM에 합니다./Library/Java/JavaVirtualMachines. 1.8을 .JDK 1.8로 변경합니다jdk1.8.0.jvm.xyz는 아무것도 변경하지 않습니다.java_home되어 /해도 1.됩니다.이치노

유사한 질문에 대한 답변

답변은 Java_home이 Java 버전을 픽업하지 못하도록 하기 위한 해킹에 해당하는 내용을 제공하지만, java_home이 기본값을 어떻게 선택하는지, 그리고 사용자가 디폴트를 파괴적으로 설정할 수 있는지 여부에 대한 이 질문에는 답하지 않습니다.

생각에는JAVA_HOME 툴은 커맨드라인 툴입니다.java ★★★★★★★★★★★★★★★★★」javac 환경변수를 에 '환경변수'를 할 수 ./usr/libexec/java_home -v '1.7*' JAVA_HOME자바 7을 사용합니다.

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

, 표준 에서는 "JDK" 아래에 되지 않습니다/Library/Java구식 ★★★.app Apple을 한 번들JavaApplicationStub는, Apple Java 6 의 6 를 합니다./System/Library/FrameworksJRE 번들 없이 AppBundler를 사용하여 구축된 새로운 스타일의 JRE는 다음과 같이 "퍼블릭" JRE를 사용합니다./Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home 되어수 stub code는 의 다른 JRE를 수 .- stub code - -또 、 2 른른른 JRE 。


편집: 다운로드 페이지에서 "어플리케이션 번들" 버전을 사용하고 있다고 가정하고 VisualVM에 대해 자세히 살펴보았습니다. 이 특정 앱은 AppBundler 애플리케이션이 아닙니다. 대신 다른 여러 셸 스크립트를 호출하고 다양한 구성 파일을 읽는 셸 스크립트가 주요 실행 파일입니다.디폴트에서는, 최신의 JDK 를 선택합니다./Library/Java 7 합니다.7u10 "Java 7" "Java 7 "9 "Java 6" "Java 6" "이다.그러나 셸 스크립트로 논리를 풀면 컨피규레이션파일을 사용하여 특정 JDK를 지정할 수 있는 것처럼 보입니다.

파일 「」을 작성합니다.~/Library/Application Support/VisualVM/1.3.6/etc/visualvm.conf의 버전에 (Visual VM 1.3.6)이 포함되어 있습니다.

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

그러면 8이 아닌 Java 7을 선택하게 됩니다.

요?/usr/libexec/java_home동작하지만 목록에 있는 사용 가능한 Java Virtual Machine을 결정하는 방법에 대한 정보를 찾을 수 없었습니다.

'아예'를 하는 것 요.ls /Library/Java/JavaVirtualMachines에 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이,./<version>/Contents/Info.plist모든 런타임에서 찾을 수 있습니다.

그런 다음 키를 기준으로 내림차순으로 정렬합니다.JVMVersionInfo.plist에 포함되어 있으며 기본적으로는 첫 번째 엔트리가 기본 JVM으로 사용됩니다.

할수 ist i 、 우 i 、 i i 、 i i 、 i i i i i i i 。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을 언인스톨 하는 것만으로 충분합니다.

하지만 지금까지 이것은 나에게 효과가 있었다.

사실 꽤 쉬워요.예를 들어 Java Virtual Machines 폴더에 다음과 같은 항목이 있다고 가정합니다.

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

디폴트라고 하고, 들면 「old」)를하고, 를 그 합니다.java -version voila,! et voila, 1.7!

소스를 사용할 수 없기 때문에 디스어셈블러에서 조금 확인했습니다.

/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_도 설정할 수 있습니다.LATCHER_VERBOSE=1: 검색 경로에 대한 추가 디버깅 로깅을 표시하며 /usr/bin/debooks 및 /usr/libexec/debook_home을 모두 사용하여 JVM 등을 발견했습니다.

과거에 JavaLaunching.framework는 (com.apple.java에서) 프리퍼런스 시스템을 사용했습니다.JavaPreferences 도메인)을 사용하여 기본 JVM을 PlistBuddy로 설정할 수 있도록 합니다.그러나 제가 알 수 있는 한 이 코드는 최신 버전의 MacOS에서 삭제되었습니다.환경변수가 유일한 방법인 것 같습니다(JDK 번들 자체의 Info.plist 편집은 제외).

디폴트 환경변수는 세션레벨로 설정할 필요가 있는 경우는 물론 .profile 또는 launchd를 사용하여 설정할 수 있습니다.

"jenv" 등의 설정을 테스트했지만 성공하지 못했습니다.그 결과, 다음과 같은 솔루션을 얻을 수 있었습니다.

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
}

(~/.timeoutrc, ~/.timeout.profile 또는 ~/.zshrc에 추가)

그리고 이렇게 부르는 것:

setJava 1.8

java_home은 잘못된 입력을 처리합니다.그러니까 잘못하면 안 돼요.Maven과 다른 것들은 이제 올바른 버전을 얻을 수 있을 것이다.

아주 간단해 소매를 걷어붙여도 괜찮다면.../Library/Java/Home은 JAVA_ 기본값입니다.HOME은 다음 중 하나를 가리키는 링크입니다.

  • /System/Library/Java/JavaVirtual Machines/1.?jdk/Contents/Home
  • /Library/Java/JavaVirtual Machines/jdk1.?_?jdk/콘텐츠/홈

그래서 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)

자바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

조금 늦었지만 Mac OSX에서 계속 발생하는 문제이기 때문에...

제가 찾은 가장 간단한 해결책은 Apple이 설치하는 OpenJDK를 제거하는 것이었습니다.Mac OSX 업데이트가 도착할 때마다 업데이트가 설치되므로 다시 제거해야 합니다.

Java를 사용하여 Mac에서 Google App Engine용 앱을 개발하면 매우 효과적입니다.OpenJDK는 제대로 작동하지 않으며 Mac OSX Yosemite 업그레이드와 함께 제공되는 Java 버전에서는 모든 배포에서 Eclipse Plug-in for App Engine이 충돌하여 "Read timeout"이라는 유용한 오류가 발생합니다.

편집: 이 정보는 특히 visualvm을 위한 것이지 다른 Java 앱을 위한 것이 아닙니다.

다른 사용자가 언급했듯이 visualvm.conf를 변경해야 합니다.

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

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

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

ps - ef | grep Visual VM

다음과 같은 것이 표시됩니다.

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

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

visualvm.conf에서 이 행의 주석을 해제하고 jdk 경로를 변경합니다.

visualvm_jdkhome="/path/to/jdk"

또한 비주얼 VM이 느리고 메모리가 많은 경우 사용 가능한 메모리 양을 크게 늘려 서버 모드로 실행하는 것이 좋습니다.

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"

요구의 심플화:-)

변경 단계 -

다음 명령을 실행하여 컴퓨터에 설치된 버전을 찾습니다.

/usr/libexec/java_home -V

복수의 버전의 JDK가 인스톨 되어 있는 경우는, 다음과 같이 표시됩니다.

11.0.16 (arm64) "Homebrew" - "OpenJDK 11.0.16" /opt/homebrew/Cellar/blabla
1.8.0_292 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 8" /Library/Java/JavaVirtualMachines/bala

머신을 기반으로 Env 파일을 만듭니다.mac의 경우 시스템 환경 파일(.zhenv, .zshprofile 등)을 만들거나 편집합니다.

nano ~/.zshenv
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8.0_292)

그런 다음 마법이 실행됩니다. 이 심볼링크가 모든 Java를 사용한 곳은 당신이 설정한 버전을 참조합니다.해피 코딩 보이즈 앤 걸스

저도 비슷한 상황이었습니다만, 다음의 프로세스가 효과가 있었습니다.

  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 파일이 있는 경우 로그인 절차 중에 모든 내용이 실행됩니다.

MacOS / / usr / libexec / java _ home mac mac mac_ Java 。바이패스 방법 중 하나는 위의 @void256에서 설명한 대로 plist 파일을 변경하는 것입니다.다른 코드를 .
$JAVA_echo $JAVA_

이제 JAVA_를 내보냅니다.~/.bash_profile에 다음 명령을 추가하여 원하는 버전의 SDK를 홈으로 만듭니다.내보내기 JAVA_HOME="/System/Library/Java/JavaVirtual Machines/1.6.0.jdk/Contents/Home" launchctl setenv JAVA_홈 $JAVA_HOME /// 환경변수 글로벌화

source ~/.bash_profile 명령을 실행하여 위의 명령을 실행합니다.

JAVA_를 변경할 필요가 있는 경우홈 JAVA_를 리셋할 수 있습니다.~/.bash_profile 파일의 HOME 값.

기본 Java 버전을 1.6*에서 1.7*로 변경하려고 합니다.다음 단계를 시도해보니 효과가 있었습니다.

  • /usr/bin 아래의 "java" 링크를 삭제했습니다.
  • 새 위치를 가리키며 다시 생성:

ln - s / Library / Java / Java Virtual Machines / jdk 1 . 7 . 0 _ 51 . jdk / Contents / Home / bin / java java

  • "version"을 사용하여 확인.

버전 " Java © "1.7.0_51"
런타임 .7. Java(TM) SE는 1.7.0_51-b13)
HotSpot VM 24 모드) Java HotSpot(TM) 64 (빌드VM ( 24.51-b03, java java java java java java)

언급URL : https://stackoverflow.com/questions/17885494/how-can-i-change-mac-oss-default-java-vm-returned-from-usr-libexec-java-home

반응형