◀ 11.

【Tomcat / Mac編】Java(JRE_HOME)のバージョン変更方法

MacでJavaを切り替えるときは、今のシェルで使うJavaと、Tomcatを起動するJavaを分けて確認します。PATHを変更しても、すでに稼働中のJVMは切り替わりません。

今のシェル、次回Tomcat起動、稼働中JVMを分けて確認する図

訂正版:今のターミナルでJavaを選ぶ

  1. /usr/libexec/java_home -Vで認識される導入済みJDKを確認する。これは新しいJDKをインストールする操作ではありません。
  2. 下の17を利用したい導入済みメジャー版へ変更する。man java_homeで手元の-F/-vの対応も確認する。-Fは条件に合わないとき既定候補へフォールバックさせない指定です。
  3. 成功時の出力を確認してから、java -versionとcommand -v javaでコマンド側も照合する。aliasや関数がある場合はPATHだけで選択が変わらないことがあります。
# Source in the current shell after choosing an installed JDK from java_home -V.
if selected_java_home=$(/usr/libexec/java_home -F -v 17) &&
   [ -n "$selected_java_home" ] &&
   [ -x "$selected_java_home/bin/java" ] &&
   "$selected_java_home/bin/java" -version; then
    export JAVA_HOME="$selected_java_home"
    export PATH="$JAVA_HOME/bin:$PATH"
else
    printf '%s\n' 'Java selection failed; JAVA_HOME and PATH were not changed.' >&2
fi
unset selected_java_home

このコードは現在のシェルへ貼るか、確認済みファイルをsourceして使う断片です。別のshプロセスで実行しても親のターミナルは変わりません。選択失敗・空パス・実行不可・Javaの起動失敗ならJAVA_HOME/PATHを変更しません。繰り返すとPATHの先頭が重複するので、同じ処理を複数の起動ファイルへ重ねて登録しないでください。

保存先とTomcatへの反映範囲

対象設定・確認する場所
通常の対話zshZDOTDIR未指定なら~/.zshrc。ログイン時には~/.zprofileも別途読み込む。既存設定の上書き順を確認する
通常のBash対話の非ログイン起動は~/.bashrc。ログイン起動は~/.bash_profile等の最初に読める個人設定を使い、.bashrcが自動で読まれるとは限らない
Tomcat標準シェル起動通常起動ではJRE_HOMEも確認する。両方設定されている場合、JAVA_HOMEだけの変更では期待どおりに変わらない。意図してJAVA_HOMEへ揃える場合に限りJRE_HOMEを解除/更新し、setenv.shの再設定も確認する
Eclipse・サービスその起動構成が選択するJRE/JDKと環境を確認する。ターミナル設定の保存だけで反映済みとしない

Tomcatの標準スクリプトでは読み取れるCATALINA_BASE/bin/setenv.shを優先し、なければCATALINA_HOME/bin/setenv.shを使います。HOME/BASEはこのファイルを探す前に決めます。再起動は停止影響を確認して別途行い、対象プロセスのJava確認で照合してください。

根拠: zshの起動ファイル、Bashの起動ファイル、Tomcatの実行設定。Mac実機の動作保証ではなく、下の古い出力は履歴として残します。

この記事の要点
  • macOS でJava バージョンを切り替える方法
  • 確認: java -version / インストール済一覧: /usr/libexec/java_home -V
  • 切替: 下の確認付き例でJAVA_HOMEとPATHを変更し、使用中のシェルが読む設定ファイルに保存する
  • 起動元が渡す環境と個別設定を確認。Eclipseの起動構成も別途照合する

 

※tomcatを直に起動した際のjavaバージョンに影響するものであってeclipse上から起動する場合はeclipse側で設定する場合があるので要注意。

 

Tomcatの通常のシェル起動はJAVA_HOME/JRE_HOMEやsetenv.shの影響を受けます。Mac全体のJavaが一括で変わるわけではなく、Eclipse・サービス・コンテナ等の起動設定は別に確認します。

MacのJavaバージョン確認方法

$ java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)

Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

 

Tomcatで設定しているJavaバージョン確認方法

下はTomcat 9.0.39とJava 8の当時の出力です。version.shは現在の設定で別のJavaプロセスを実行する確認用で、既存サーバープロセスのバージョンを取得するコマンドではありません。古い更新版を導入先にしないでください。

$ ./version.sh
Using CATALINA_BASE:   /Applications/apache-tomcat-9.0.39
Using CATALINA_HOME:   /Applications/apache-tomcat-9.0.39
Using CATALINA_TMPDIR: /Applications/apache-tomcat-9.0.39/temp

Using JRE_HOME:        /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
Using CLASSPATH:       /Applications/apache-tomcat-9.0.39/bin/bootstrap.jar:/Applications/apache-tomcat-9.0.39/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Server version: Apache Tomcat/9.0.39
Server built:   Oct 6 2020 14:11:46 UTC
Server number:  9.0.39.0
OS Name:        Mac OS X
OS Version:     10.14.6
Architecture:   x86_64

JVM Version:    1.8.0_131-b11
JVM Vendor:     Oracle Corporation

 

使用できるJavaバージョンの確認

/System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java_home -V

 

設定の変更

ここからの黒い表は旧手順の記録です。そのまま実行しないでください。 自分のシェル設定を編集する通常の作業にsudoは不要です。先に上の訂正版とシェル別の保存先を確認してください。

sudo vi ~/.bashrc

旧説明の.zshrcdは.zshrcの誤記です。ただし.bashrc/.profile/.zshrcは同じ条件で読まれるファイルではありません。実際のシェルとログイン/対話起動を確認して保存先を選びます。

 

次の旧例の$PATは$PATHの誤記です。 既存の検索パスを失うため、この2行は追加しないでください。引用符と失敗確認を含む上の訂正版を使用します。

export JAVA_HOME=`/System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java_home -v "1.8"`
PATH=$JAVA_HOME/bin:$PAT

旧例の1.8はJava 8を表します。任意の値を入れるのではなく、導入済み一覧とアプリ/Tomcatの対応Javaを確認します。

 

次のsource ~/.bashrcはBash用の旧例です。自分が確認・編集したファイルだけを現在の対応シェルで読み直します。sourceはファイル内の命令を実行し、別プロセスのTomcatへ設定を反映する操作ではありません。

source ~/.bashrc

 

子ページ

子ページはありません

同階層のページ
  1. tomcatインストール(CentOS)
  2. WARファイルのAutoDeploy設定
  3. tomcatの起動/停止(Linux, Mac)
  4. JRE(JVM)のJavaのバージョン確認方法
  5. エラー一覧
  6. CATALINA_HOMEの確認方法(Linux, Mac)
  7. 管理画面の開き方
  8. tomcatの起動確認方法
  9. tomcatの起動/停止ログとcatalina.log/catalina.outの違い
  10. CentOSにおけるポート開放方法
  11. Javaのバージョン変更方法(Mac編)

最近更新/作成されたページ