JEP / Issue 番号 | 非互換が追加された JDK バージョン | 概要 | 問題の発生タイミング | 非互換の詳細 | 発生し得る主な問題 | 改修案 | 重要度 |
---|---|---|---|---|---|---|---|
JEP 261 | 9 | Java モジュールシステム導入で JDK をモジュール化、内部 API を封鎖 | コンパイル / デプロイ / 実行 | 非公開 API への反射が警告→エラー、標準外モジュールは解決されず | ClassNotFound、IllegalAccessError、スプリットパッケージ衝突 | --add-modules / --add-opens で公開、ライブラリ更新 |
高 |
JEP 396 / 403 | 16 / 17 | 内部 API の強力なカプセル化と --illegal-access モード廃止 |
実行 | JDK 16+ で反射アクセスは InaccessibleObjectException |
フレームワーク初期化失敗 | --add-opens 指定、最新ライブラリへ移行 |
高 |
JEP 220 ほか | 9 | モジュラーランタイムイメージ、rt.jar ・lib/ext ・endorsed 機構廃止 |
デプロイ / 実行 | 自動クラスパス読込不可、レイアウト変更 | JAR 不検出、スクリプトがパス誤認 | JAR をクラスパス/モジュールパスに明示、スクリプト修正 | 中 |
JEP 320 | 11 | Java EE / CORBA モジュール完全削除 | コンパイル / デプロイ / 実行 | JAXB・JAX‑WS など javax.* が JDK から消滅 |
NoClassDefFoundError 、SOAP エンドポイント起動失敗 |
Jakarta 版ライブラリ同梱、GlassFish 最新版 | 高 |
JEP 289 | 11 | Applet・Java Web Start 削除 | クライアント実行 | javaws ・plugin・appletviewer 不在 |
アプレット/JNLP 起動不可 | Web 技術へ移行、OpenWebStart 代替 | 低 |
JEP 372 | 15 | Nashorn JavaScript エンジン削除 | コンパイル / 実行 | jdk.nashorn.* 、jjs なし |
ScriptEngine が "nashorn" を取得不可 | GraalJS / Rhino 導入、スクリプト改修 | 中 |
JEP 407 | 17 | RMI Activation 削除 | コンパイル / 実行 | java.rmi.activation.* と rmid 排除 |
Activatable 利用コードがエラー | 標準 RMI へ置換、設計変更 | 低 |
JEP 367 | 14 | Pack200 圧縮サポート削除 | ビルド / 実行 | pack200 / unpack200 コマンド・API 削除 |
Ant などの Pack200 タスク失敗 | 通常 JAR 使用、再圧縮 | 低 |
JDK‑8179909 | 11 | JVM SNMP エージェント削除 | 実行 | com.sun.management.snmp 消滅 |
SNMP 監視不能 | JMX / Prometheus ブリッジへ移行 | 低 |
JEP 410 | 16 | 実験的 AOT / Graal JIT 削除 | デプロイ | jaotc 、-XX:+UseJVMCICompiler 不認識 |
起動スクリプトがエラー | オプション削除、GraalVM 外部利用 | 低 |
(Policy) | 9 | 強力暗号がデフォルト有効 (JCE 無制限) | 実行 | crypto.policy=unlimited が既定 |
例外ハンドリング差異、法規制確認 | 必要なら limited に変更、法令遵守 | 低 |
JEP 229 | 9 | 既定 KeyStore 形式が PKCS#12 | 実行 / デプロイ | KeyStore.getDefaultType() が "pkcs12" |
JKS 読込失敗、誤形式生成 | -storetype JKS 指定、PKCS12 へ移行 |
中 |
JEP 332 | 11 | TLS 1.3 実装と旧暗号スイート無効化 | 実行 | TLS1.3 優先、RSA KeyExchange 廃止 | 古いサーバー接続失敗 | エンドポイント更新、jdk.tls.client.protocols 設定 |
中 |
多数 | 11+ | 弱いアルゴリズム・旧 CA の無効化 | 実行 | SHA‑1 / 1024bit RSA / 一部 ECC 曲線不可 | SSL ハンドシェイク失敗、署名検証失敗 | 証明書更新、java.security 調整 |
中 |
JEP 411 | 17 / 18 | SecurityManager 廃止方向 | 実行 | JDK 18 からデフォルト無効化 | ポリシー型サンドボックス機能喪失 | -Djava.security.manager=allow で暫定、OS 隔離へ |
高* |
JEP 421 | 18 | finalize() 将来削除予定 |
実行 | 非推奨警告、今後無効化 | リソース解放遅延・漏洩 | Cleaner / AutoCloseable へ移行 | 低→将来高 |
JEP 252 | 9 | 既定ロケールデータを CLDR へ変更 | 実行 | 日付・数値などの表示が変化 | テスト差分、UI 表示差異 | java.locale.providers=COMPAT 指定、表示確認 |
低 |
(Regex) | 9 | 正規表現ネストクラス ^ 挙動変更 |
実行 | 特定パターンの一致結果が変化 | バリデーション誤動作 | パターン修正 | 低 |
JEP 400 | 18 | デフォルト文字セットを UTF‑8 に固定 | 実行 | Windows 等 CP1252→UTF‑8 へ | ファイル文字化け、デコード例外 | 文字セット明示、-Dfile.encoding=COMPAT |
中 |
CSR 等 | 21 | 古い API / 機能の削除 (ThreadGroup.allowThreadSuspension 等) | コンパイル / 実行 | 当該メソッド・JAR Index 等削除 | 古ライブラリで NoSuchMethodError |
依存削除、代替 API 利用 | 低 |
注: 印の「高」は SecurityManager を使用しているシステムに限り高リスクを示す。