Javaのバージョン確認では「シェルのjava」「ビルドで選ぶJDK」「稼働中のTomcat」を区別します。java -versionが成功しても、そのJavaでTomcatが動いている証明にはなりません。
TomcatのJavaが変わらないときの確認順
- まず対象を決める。稼働中なら起動時刻とPIDを確認し、別のTomcatを見ていないか照合する。
- 次回起動設定ならJAVA_HOME/JRE_HOMEとsetenv、IDE/サービスの設定を確認する。version.shは設定確認であり、既存JVMの取得ではない。
- 稼働中の対象へ許可されたjcmd VM.version等で照合する。環境変数を変更しただけで反映済みと判断しない。
- ビルドの問題ならMaven/Gradleの実行JVMだけでなく、コンパイラーやテストのtoolchain設定も別途確認する。
同じメジャー版でも更新番号・ベンダー・CPUアーキテクチャを区別します。下の17.0.8等は出力の読み方を示す旧例で、現在の導入推奨版ではありません。関連記事はCATALINA_HOME/BASE、親はApache Tomcatです。
根拠: JDKのjcmd、Runtime.Versionの各API。プロセス一覧が空であることだけで、ホストや別コンテナにもJVMが存在しないと結論しません。
| この記事の要点 |
|---|
|
方法 1: java -version (シェル)
$ java -version
openjdk version "17.0.8" 2023-07-18 LTS
OpenJDK Runtime Environment Temurin-17.0.8+7 (build 17.0.8+7-LTS)
OpenJDK 64-Bit Server VM Temurin-17.0.8+7 (build 17.0.8+7-LTS, mixed mode, sharing)
出力の見方:
- 17.0.8: メジャー.マイナー.パッチ (Java 17)
- LTS: 長期サポート (Long Term Support)
- OpenJDK: Javaの実装系統を示す文字列。配布元はjava.vendor等も照合し、OpenJDKという表示だけでTemurin/Corretto等を断定しない
- 64-Bit Server VM: アーキテクチャ (32 / 64 bit) と VM タイプ
方法 2: javac -version (JDK のみ)
下の旧コメント「javacがなければJDK未導入」は断定できません。コマンドが見つからないだけならPATHの問題や別の実行環境も考えられます。導入先のbin/javacと、java/javacの参照先をそれぞれ確認してください。
$ javac -version
javac 17.0.8
# javac がなければ JRE のみで JDK がインストールされていない
# → 開発するなら JDK のインストールが必要
方法 3: java --version (新しい形式)
Java 9 以降は --version(ダブルハイフン)も使えます:
$ java --version
openjdk 17.0.8 2023-07-18 LTS
OpenJDK Runtime Environment Temurin-17.0.8+7 (build 17.0.8+7-LTS)
OpenJDK 64-Bit Server VM Temurin-17.0.8+7 (build 17.0.8+7-LTS, mixed mode, sharing)
JAVA_HOME の確認
環境変数 JAVA_HOME が指す JDK ディレクトリ:
# Linux / Mac
$ echo $JAVA_HOME
/usr/lib/jvm/java-17-openjdk
# Windows
> echo %JAVA_HOME%
C:\Program Files\Eclipse Adoptium\jdk-17.0.8.7-hotspot
# PowerShell
PS> $env:JAVA_HOME
実体のパスを確認
# java コマンドの実体
$ which java
/usr/bin/java
$ ls -l /usr/bin/java
lrwxrwxrwx 1 root root 22 May 15 2026 /usr/bin/java -> /etc/alternatives/java
$ ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 43 May 15 2026 /etc/alternatives/java -> /usr/lib/jvm/java-17-openjdk/bin/java
# Windows
> where java
C:\Program Files\Eclipse Adoptium\jdk-17.0.8.7-hotspot\bin\java.exe
実行中の Java プロセスのバージョンを確認
以下の一覧やコマンドラインには機密値が含まれ得るので、そのまま共有しないでください。 /procを使う部分はLinux専用です。1234は例であり、実際の対象PID・実行ユーザー・コンテナ境界を確認します。jcmdは同一マシン上の対象JVMへ接続する診断ツールで、実行権限やJVMの設定によって接続できない場合があります。確認のために管理ポートを公開しません。
# Java プロセス一覧
$ jps -lvm
1234 com.example.MyApp -Xmx2g
1235 org.apache.catalina.startup.Bootstrap -Dcatalina.home=/opt/tomcat ...
# プロセスの実行ファイルを特定 (Linux)
$ ls -l /proc/1234/exe
/proc/1234/exe -> /usr/lib/jvm/java-17/bin/java
# プロセスのバージョン情報 (jcmd)
$ jcmd 1234 VM.version
1234:
OpenJDK 64-Bit Server VM version 17.0.8+7-LTS
JDK 17.0.8
# プロセス起動時のコマンドライン
$ cat /proc/1234/cmdline | tr "\0" " "
/usr/lib/jvm/java-17/bin/java -Xmx2g -jar /opt/myapp/app.jar
プログラム内からバージョン取得
下のクラスが示すのは、このプログラム自身を実行したJVMです。Runtime.version()はJava 9以降ですが、feature()/interim()/update()を使うこの例全体はJava 10以降が必要です。Java 8へそのままコンパイルできません。java.homeの末尾が必ず/jreになるわけではなく、パス例と実際の値を区別してください。
public class JavaVersionInfo {
public static void main(String[] args) {
System.out.println("Java Version: " + System.getProperty("java.version"));
// 例: 17.0.8
System.out.println("Java Vendor: " + System.getProperty("java.vendor"));
// 例: Eclipse Adoptium
System.out.println("JVM Name: " + System.getProperty("java.vm.name"));
// 例: OpenJDK 64-Bit Server VM
System.out.println("JVM Version: " + System.getProperty("java.vm.version"));
// 例: 17.0.8+7-LTS
System.out.println("Java Home: " + System.getProperty("java.home"));
// 例: /usr/lib/jvm/java-17/jre
System.out.println("OS: " + System.getProperty("os.name"));
System.out.println("OS Arch: " + System.getProperty("os.arch"));
// Java 9+ の Runtime API
Runtime.Version v = Runtime.version();
System.out.println("Feature: " + v.feature()); // 17
System.out.println("Interim: " + v.interim()); // 0
System.out.println("Update: " + v.update()); // 8
System.out.println("Build: " + v.build().orElse(0)); // 7
}
}
Maven / Gradle で参照する Java を確認
# Maven
$ mvn -version
Apache Maven 3.9.4
Java version: 17.0.8, vendor: Eclipse Adoptium
Java home: /usr/lib/jvm/java-17-openjdk
Default locale: ja_JP, platform encoding: UTF-8
OS name: "linux", version: "5.15.0-25-generic", arch: "amd64", family: "unix"
# Gradle
$ ./gradlew --version
Gradle 8.3
Kotlin: 1.9.0
JVM: 17.0.8 (Eclipse Adoptium 17.0.8+7-LTS)
OS: Linux 5.15.0-25-generic amd64
複数バージョンの切替
update-alternativesを採用するLinux環境
次はDebian/Ubuntu等でこの管理方式を使う場合の例で、macOS標準の切替手順ではありません。またjavaの切替とjavacやサービスの設定は別途照合します。MacはJava切替の記事を参照してください。
# 候補一覧
$ sudo update-alternatives --config java
There are 3 choices for the alternative java:
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-21-openjdk/bin/java 2100 auto mode
* 1 /usr/lib/jvm/java-17-openjdk/bin/java 1700 manual mode
2 /usr/lib/jvm/java-11-openjdk/bin/java 1100 manual mode
# 番号を入力して切替
SDKMAN!
下の21.0.1-temは過去の識別子です。現在も取得できる、安全な更新版である、という保証ではありません。旧install/defaultを診断のために実行せず、利用環境の候補と設定への影響を確認してください。
$ sdk list java
$ sdk install java 21.0.1-tem
$ sdk use java 21.0.1-tem # シェル内のみ
$ sdk default java 21.0.1-tem # デフォルト
Windows
JAVA_HOME 環境変数を切り替え、PATH の %JAVA_HOME%\bin を有効化。
関連記事
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09