Java SEバージョン移行

Java Code Reviewのルール・セットのうち、Java SE Migrationカテゴリには、 J2SE 5.0、Java SE 6、Java SE 7、Java SE 8、Java SE 11、Java SE 17からの移行に関するルールが含まれています。 Java 移行の対象は、Java SE 8、11、17、21 です。

Sun Java と IBM Java の互換性の影響」カテゴリーは、IBM の Java ランタイム環境では 使用可能ではない Sun の API をマイグレーションするための規則セットを提供します。 可能な場合、規則は javax.net クラスまたは com.ibm.net.ssl クラスを使用するようにコードをマイグレーションします。

選択される規則は、アプリケーションが以前使用していたマイグレーション元の Java ランタイム環境と マイグレーション先の WebSphere のバージョンの選択によって異なります。 Libertyでは、Java SE 8、11、17、または21をターゲットとして選択できます。 WebSphere traditional の場合、Java SE 8 にマイグレーションする必要があります。

クイック・フィックスが使用可能な場合もあります。 クイック・フィックスのない規則には規則違反のフラグが立てられるので、 それらの使用法を評価し、必要な場合は、手動でコードをマイグレーションすることができます。

Java SE 21互換性の影響

Java 21 は Liberty 23.0.0.10 以降でサポートされています。 Java SE 21の互換性への影響には、Java SEバージョン17から21までのすべての互換性への影響が含まれる。

表 1. Java SE 21の互換性への影響
規則名 ルールの説明 自動修正
Java SE 21の一般情報と潜在的な問題 このルールには、Java SE 21の変更点、およびJava SE 21以降にリリースされた以前の非LTS(長期サポート)Javaバージョンに関する情報へのリンクが含まれています。 java-version-21.yml
org.openrewrite.java.migrate.UpgradeToJava17
出力ストリームが PrintStream の場合、デフォルトの文字コードを使わないようにする このルールは、java.io.PrintStream, java.io.PrintWriter, java.io.OutputStreamWriter Javaクラスのコンストラクタがjava.io.OutputStreamを取り、charsetを取らないことにフラグを立てます。 いいえ
javax.security.auth.SubjectのgetSubject()、doAs()メソッドは非推奨です このルールは、getSubject()doAs()メソッドがjavax.security.auth.Subjectクラスで使われていることにフラグを立てます。 getSubject() メソッドは Java SE 17 から非推奨となり、 forRemoval = true とマークされました。 doAs() メソッドは Java SE 18 から非推奨となり、 forRemoval = true とマークされました。 java-version-21.yml
org.openrewrite.java.migrate.RemovedSubjectMethods
java.security.manager システム・プロパティのデフォルト値が変更されました このルールは、java.lang.Systemの中でsetSecurityManager(SecurityManager())メソッドが使われていることにフラグを立てます。 いいえ
java.lang.Compilerクラスは使用しないでください このルールは、java.lang.Compilerクラスの使用にフラグを立てるものです。 このクラスはJava SE 21で削除された。 いいえ
Thread.stop()、Thread.resume()、Thread.suspend()メソッドの使用は避けてください このルールは、Thread.stop()Thread.suspend()Thread.resume()メソッドの使用にフラグを立てる。 これらのメソッドはJava SE 19で廃止され、常にUnsupportedOperationExceptionを投げるように更新されました。 このメソッドは本質的に安全ではなく、Java 1.2以降非推奨となっているため、将来のリリースでは最終的にデグレードされ、削除されるでしょう。 いいえ
ThreadGroup.allowThreadSuspensionメソッドは使用しないでください このルールはThreadGroup.allowThreadSuspensionメソッドの使用にフラグを立てる。 このメソッドは、JDK 1.1 では低メモリ処理のために使用されていましたが、完全に指定されることはありませんでした。 JDK 1.2 (1998) では非推奨となり、「何もしない」に変更されました。 このメソッドはJava 21リリースで削除された。 いいえ
ObjectInputStream.GetField.get(name, object) メソッドが ClassNotFoundException をスローするように変更されました このルールは、java.io.ObjectInputStream.GetFieldの中でget(String name, Object val)メソッドが使われていることにフラグを立てます。 いいえ
RMIIIOPServerImpl クラスは使用しないでください このルールは、Java SE 21で削除されたjavax.management.remote.rmi.RMIIIOPServerImplクラスの使用にフラグを立てる。 いいえ
レガシーな PlainSocketImpl と PlainDatagramSocketImpl の実装の使用を避けてください この規則は、コンストラクタ java.net.Socket(Proxy proxy)java.net.DatagramSocket(SocketAddress bindaddr)java.net.MulticastSocket(SocketAddress bindaddr)の使用にフラグを立てる いいえ
java.desktop では、非推奨の空の finalize() メソッドの使用を避けてください このルールは、java.awt.color.ICC_Profilejava.awt.image.ColorModeljava.awt.image.IndexColorModelクラスでfinalize()メソッドを使うことにフラグを立てます。 java-version-21.yml
org.openrewrite.java.migrate.DeleteDeprecatedFinalize
劣化した ThreadGroup メソッドの使用を避ける このルールは、ThreadGroup.setDaemonThreadGroup.isDaemonThreadGroup.destroyThreadGroup.isDestroyedメソッドの使用にフラグを立てる。 いいえ

Java SE 17 互換性の影響

Java 17 は、Liberty 21.0.0.10 以降でサポートされています。 Java SE 17 互換性の影響には、Java SE バージョン 12 から 17 へのすべての互換性の影響が含まれます。

表 2. Java SE 17 互換性の影響
規則名 ルールの説明 自動修正
非準拠 XML 文書の Properties.loadFromXML メソッドの振る舞いの変更 この規則により、java.util.Properties.loadFromXML​(java.io.InputStream) メソッド呼び出しにフラグを立てます。 このメソッドは、Java SE 12 の非準拠 XML 文書の例外をスローします。 いいえ
user.timezone システム・プロパティーの振る舞いの変更 この規則により、user.timezone プロパティー値が設定された System.getProperty メソッド呼び出しにフラグを立てます。 このメソッドは、Java SE 12 でヌルを返すことがあります。 いいえ
正規表現のパターン・マッチングの振る舞いの変更を確認する このルールは、指定された正規表現に交点が含まれ、その後にネストされた文字クラスが続き、その後にネストされていない文字クラスが続くメソッドの呼び出しをフラグする。 いいえ
削除された FileInputStream.finalize() メソッドおよび FileOutputStream.finalize() メソッドを使用しない java.io.FileInputStream.finalize() メソッドおよび java.io.FileOutputStream.finalize() メソッドは、Java SE 12 から削除されました。 java-version-17.yml
org.openrewrite.java.migrate.RemovedFileIOFinalizeMethods
com.sun.awt.SecurityWarning クラスを使用しない com.sun.awt.SecurityWarning クラスは Java SE 12 から削除されました。 いいえ
削除された ZipFile.finalize() メソッド、Inflater.finalize() メソッド、Deflater.finalize() メソッドを使用しない java.util.zip.ZipFile.finalize() メソッド、java.util.zip.Inflater.finalize() メソッド、java.util.zip.Deflater.finalize() メソッドは、Java SE 12 から削除されました。 java-version-17.yml
org.openrewrite.java.migrate.RemovedZipFinalizeMethods
削除された Runtime.traceInstructions(boolean) メソッドおよび Runtime.traceMethodCalls(boolean) メソッドを使用しない java.lang.Runtime.traceInstructions(boolean)java.lang.Runtime.traceMethodCalls(boolean) メソッドはJava SE 13から削除された。 java-version-17.yml
org.openrewrite.java.migrate.RemovedRuntimeTraceMethods
java.util.jar.Pack200 API が削除されている java.util.jar.Pack200.Packerjava.util.jar.Pack200.Unpacker のインターフェイスに加え、 java.util.jar.Pack200 クラスが削除された。 いいえ
sun.nio.cs.map システム・プロパティーが削除されている Java SE 14 で、sun.nio.cs.map システム・プロパティーは削除されました。 この規則により、「sun.nio.cs.map」へのストリング・リテラル参照にフラグを立てます。 いいえ
java.security.acl パッケージが削除されている Java SE 14 では、java.security.acl パッケージは削除されました。代わりに java.security.Policy クラスを使用する必要があります。 いいえ
脆弱な名前付き曲線が削除されている 脆弱な名前付き曲線は、Java SE 16 の SunEC プロバイダーから削除されました。 この規則により、すべての脆弱な名前付き曲線への参照にフラグを立てます。 いいえ
新規 java.lang.Record クラスとの名前空間の衝突を確認する Java SE 14では、 java.lang.Record クラスが追加された。 名前空間の衝突を避けるために、ワイルドカード・インポート (例えば、「com.foo.*」) ではなく、単一タイプ・インポート (例えば、「com.foo.Record」) を使用して、「Record」という名前の他のクラスがインポートされるようにします。 いいえ
netscape.javascript.JSObject.getWindow(Applet) メソッドが削除されている netscape.javascript.JSObject.getWindow(Applet) メソッドはJava SE 14で削除された。 このメソッドは Java プラグインでのみ使用され、これも削除されているため、このメソッドの代わりはありません。 いいえ
DatagramPacket.getPort() メソッドでの振る舞いの変更を確認する DatagramPacket.getPort() メソッドのデフォルト戻り値は Java SE 15 で -1 から 0 に変更されました。 いいえ
RMIConnectorServer.CREDENTIAL_TYPES 定数が削除されている RMIConnectorServer.CREDENTIAL_TYPES 定数は Java SE 15 で削除されました。 java-version-17.yml
org.openrewrite.java.migrate.RemovedRMIConnectorServerCredentialTypesConstant
SSLSession.getPeerCertificateChain() メソッド実装が削除されている Java SE 15では、デフォルトの SSLSession.getPeerCertificateChain() メソッド実装が削除された。 java-version-17.yml
org.openrewrite.java.migrate.RemovedSSLSessionGetPeerCertificateChainMethodImpl
Modifier() および ConstantBootstraps() コンストラクターが削除されている Modifier() コンストラクターと ConstantBootstraps() コンストラクターは Java SE 15 で削除されました。 java-version-17.yml
org.openrewrite.java.migrate.RemovedModifierAndConstantBootstrapsConstructors
SO_FLOW_SLA Solaris ソケット・オプションが削除されている SO_FLOW_SLA Solaris ソケット・オプション、および関連する SocketFlow クラスと SocketFlow.Status クラスは Java SE 15 で削除されました。 いいえ
com.sun.net.ssl.internal.ssl.Provider プロバイダー名が削除されている com.sun.net.ssl.internal.ssl.Provider レガシー SunJSSE プロバイダー名は、Java SE 15 で削除された。 これは、SunJSSE プロバイダー名で置き換える必要があります。 java-version-17.yml
org.openrewrite.java.migrate.RemovedLegacySunJSSEProviderName
java.lang.CharSequence インターフェースで isEmpty() デフォルト・メソッドを確認する Java SE 15の java.lang.CharSequence インターフェイスに、デフォルトの isEmpty() メソッドが追加された。 java.lang.CharSequence を実装するクラスと、デフォルトのisEmpty() メソッドを定義する別のインターフェースを更新する必要がある場合があります。 いいえ
Java SE 17 の一般情報および潜在的な問題 Java SE 17 での変更内容と、このツールで検出されない潜在的なマイグレーションの問題に関する一般情報。 java-version-17.yml
org.openrewrite.java.migrate.Java8toJava11
ToolProvider() コンストラクターが削除されている Java SE 16では、 ToolProvider コンストラクタが削除された。 java-version-17.yml
org.openrewrite.java.migrate.RemovedToolProviderConstructor
com.sun.net.ssl パッケージが削除されている 内部 API com.sun.net.ssl は削除されました。 このパッケージは内部使用のみを目的としていました。代替の API が、javax.net.ssl パッケージ内にあります。 java-version-17.yml
org.openrewrite.java.migrate.SunNetSslPackageUnavailable
java.lang.ThreadGroup および java.lang.Thread 内の非推奨のメソッドを使用しない java.lang.Thread 内の suspend メソッドおよび resume メソッドおよび java.lang.ThreadGroup 内の suspend メソッド、resume メソッド、および allowThreadSuspension メソッドは Java SE 14 で非推奨になりました。 java.lang.ThreadGroup 内の stop メソッド、destroy メソッド、isDestroyed メソッド、setDaemon メソッドおよび isDaemon メソッドは、Java SE 16 で非推奨になりました。 いいえ
java.util.stream.Stream インターフェースで toList() デフォルト・メソッドを確認する デフォルトの toList()メソッドが Java SE 16 の java.util.stream.Stream インターフェースに追加されました。 java.util.stream.Stream を実装するクラスと、デフォルトのtoList() メソッドを定義する別のインターフェースを更新する必要がある場合があります。 いいえ
HttpPrincipal.getName() メソッドの振る舞いの変更を確認する Java SE 16では、 HttpPrincipal.getName() メソッドが返す値が変更された。 いいえ
java.io.LineNumberReader クラスの振る舞いの変更を確認する java.io.LineNumberReader クラスの行終端文字の定義は、Java SE 16 で変更されました。 いいえ
非推奨の java.security.cert API を使用しない java.security.cert.X509Certificatejava.security.cert.X509CRLjava.security.cert.X509CertSelector、および java.security.cert.X509CRLSelector 内の getIssuerDNgetSubjectDNgetIssuerDNsetIssuersetSubjectgetIssuerAsStringgetSubjectAsString、および addIssuerName メソッドは、Java SE 16 で非推奨になりました。 いいえ
java.util.logging.LogRecord で非推奨のメソッドを使用しない java.util.logging.LogRecord 内の getThreadID および setThreadID メソッドは、Java SE 16 で非推奨になりました。 java-version-17.yml
org.openrewrite.java.migrate.DeprecatedLogRecordThreadID
非推奨のプリミティブ・ラッパー・クラス・コンストラクターを使用しない プリミティブ・ラッパー・クラス・コンストラクターは、Java SE 16 で非推奨になりました。 いいえ
javax.security.cert パッケージは削除予定のため非推奨

javax.security.cert は Java SE 13 で非推奨になり、除去のマークが付けられました。 このパッケージ内のクラスをもう使用しないようにする必要があります。 置き換えに適したものが java.security.cert パッケージに入っています。

java-version-17.yml
org.openrewrite.java.migrate.DeprecatedJavaxSecurityCert
Thread.countStackFrames() メソッドは無条件に UnsupportedOperationException をスローするように変更された

最終的に非推奨となったメソッド Thread.countStackFrames() は、Java SE 14 では無条件に UnsupportedOperationException を投げるように変更された。

java-version-17.yml
org.openrewrite.java.migrate.DeprecatedCountStackFramesMethod
削除された RMI アクティブ化パッケージを使用しない

java.rmi.activation パッケージは Java SE 15 で非推奨となり、Java SE 17で削除されました。

いいえ
Socket Implementation Factory Mechanism は非推奨 システム全体のソケット実装ファクトリーを設定するために使用される以下のメソッドは、Java SE 17 で非推奨になりました。static void ServerSocket.setSocketFactory(SocketImplFactory fac)static void Socket.setSocketImplFactory(SocketImplFactory fac)static void DatagramSocket.setDatagramSocketImplFactory(DatagramSocketImplFactory fac) いいえ
HttpClient.newHttpClient および HttpClient.Builder.build での振る舞いの変更を確認する Java SE 17で交点を使用している正規表現の一部のパターン・マッチングの振る舞い作が変更されました。 いいえ
sun.misc.Unsafe からの defineAnonymousClass メソッドが削除されている sun.misc.Unsafe からの defineAnonymousClass メソッドは Java SE 17 で削除されました。 いいえ
Java エージェントの振る舞いの変更を確認する Java エージェントの premain メソッドおよび agentmain メソッドは、Java SE 17でパブリックである必要があります。 java-version-17.yml
org.openrewrite.java.migrate.Jre17AgentMainPreMainPublic
Applet API は削除予定のため非推奨 アプレット API は、Java SE 17で削除対象として非推奨になりました。 いいえ
SHA-1 アルゴリズムで署名された JAR は現在では制限されている SHA-1 アルゴリズムで署名された JAR は、デフォルトでは制限されるようになり、Java SE 17 では署名されていないものとして扱われるようになりました。 いいえ
リモート EJB 呼び出しは Java SE 17 で失敗する可能性があります モジュール・アクセスの制約が強化されたため、Java SE 17 でリモート EJB 呼び出しが失敗する可能性があります。 いいえ

Java SE 11 互換性の影響

Java 11 は、Liberty v19.0.0.1 以降でサポートされます。

表 3. Java SE 11 互換性の影響
規則名 ルールの説明 自動修正
非推奨の RMIIIOPServerImpl クラスを使用しない この規則は、RMIIIOPServerImpl クラスの使用にフラグを立てます。 このクラスは、Java SE 11 で非推奨となりました。 いいえ
デフォルト・ロケール・データの動作の変更 Unicode Consortium の Common Locale Data Repository (CLDR) が、Java 11 でデフォルト・ロケール・データとして有効になりました。 以前のリリースでは、デフォルトは JRE でした。これは現在 COMPAT と呼ばれています。 日付、時刻、数字フォーマットなど、ロケールの影響を受けるサービスを使用するコードは、CLDR ロケール・データを使用すると異なる結果を生成する可能性があります。 いいえ
Class.getAnnotation() メソッドを呼び出すときの例外の振る舞いの変更 Java 11 では、java.lang.Class.getAnnotation() メソッドは、欠落しているクラスを参照する配列値がアノテーションにある場合、java.lang.ArrayStoreException ではなく java.lang.TypeNotPresentException をスローします。 java-version-11.yml
org.openrewrite.java.migrate.ArrayStoreExceptionToTypeNotPresentException
java.util.concurrent.ThreadPoolExecutor.finalize() メソッドの振る舞いの変更 Java 11 では、java.util.concurrent.ThreadPoolExecutor.finalize() メソッドはスレッド・プールをシャットダウンしなくなりました。 いいえ
java.lang.invoke.MethodHandles.filterArguments メソッドの振る舞いの変更 この規則により、java.lang.invoke.MethodHandles.filterArguments メソッドを使用するアプリケーションにフラグを立てます。 いいえ
javax.management.MBeanOperationInfo コンストラクターの振る舞いの変更 この規則により、指定された impact が INFO、ACTION、ACTION_INFO、UNKNOWN のいずれでもない場合に、javax.management.MBeanOperationInfo コンストラクターを使用するアプリケーションにフラグを立てます。 いいえ
生の型を使用する java.xml API メソッドの振る舞いの変更 Java 11では、生の型を持つメソッド宣言を含む java.xml APIが更新され、型パラメーターが追加された。 いいえ
Selector.select メソッドと Selector.selectNow メソッドの振る舞いの変更を確認する この規則により、java.nio.channels.Selector.select() メソッドと java.nio.channels.Selector.selectNow() メソッドにフラグを立てます。 これらのメソッドの振る舞いは、JDK 11 で変更されました。 いいえ
入出力チャネルのブロッキングと非ブロッキングのコード・パスの分離に関連する振る舞いの変更を確認する Java 11 では、パフォーマンスと信頼性を向上させるために、入出力チャネルに対して個別のブロッキングと非ブロッキングのコード・パスが作成されました。 この規則により、振る舞いの変更によって影響を受ける可能性がある API 呼び出しにフラグを立てます。 いいえ
com.ibm.security.auth.module.Krb5LoginModule クラスに関連した構成変更を確認する この規則により、Java 11 へのマイグレーション時に構成変更を必要とする可能性のある、com.ibm.security.auth.module.Krb5LoginModule 関連クラスへのすべての参照にフラグを立てます。 いいえ
デフォルトのキーストアの変更を検出する Java 11では、デフォルトのキーストアが JKS から PKCS12 に更新されました。 そのため、 KeyStore.getDefaultType() に依存するアプリケーションは、JKS キーストアを PKCS12 に変換しない限り、移行後に問題が発生する可能性があります。 java-version-11.yml
org.openrewrite.java.migrate.ChangeDefaultKeyStore
Pack200.Packer インターフェースおよび Pack200.Unpacker インターフェースで削除されたメソッドを確認する addPropertyChangeListenerremovePropertyChangeListener は、Java 11 の Pack200.Packer インターフェースと Pack200.Unpacker インターフェースで定義されなくなりました。 いいえ
com.sun.image.codec.jpeg パッケージから API を使用しない com.sun.image.codec.jpeg API は、Java SE 11 では使用できません。 いいえ
com.sun.xml.internal.bind.* から API を使用しない パッケージ com.sun.xml.internal.bind.* パッケージの API は、Java SE 11 では使用できなくなりました。 java-version-11.yml
org.openrewrite.java.migrate.InternalBindPackages
sun.* から API を使用しない パッケージ sun.* APIは、サポートされていないJDK内部のAPIであり、いつなくなってもおかしくない。 いいえ
sun.* の BASE64Encoder/Decoder API は使用しないでください パッケージ sun.misc.BASE64Encodersun.misc.BASE64DecoderはJava SE 11で削除されました。 java-version-11.yml
org.openrewrite.java.migrate.UseJavaUtilBase64
JCEKSキーストア形式を使用しない このルールは、 KeyStore.getInstance("JCEKS") の使用を検出し、フラグを立てる。 開発者は、互換性のために、 PKCS12 を使用するようにアプリケーションを更新する必要があります。 いいえ
javax.security.auth.Policy クラスを使用しない javax.security.auth.Policy クラスは、Java SE 11 では使用できません。 この規則により、javax.security.auth.Policy クラスへのすべての参照にフラグを立てます。 java-version-11.yml
org.openrewrite.java.migrate.RemovedPolicy
削除された com.sun クラスを使用しない このルールは、Java SE 11で利用できない com.sun クラスにフラグを立てる。 いいえ
削除された runFinalizersOnExit メソッドを使用しない java.lang.Runtime.runFinalizersOnExit メソッドと java.lang.System.runFinalizersOnExit メソッドは Java SE 11 から削除されました。 いいえ
com.sun.awt.AWTUtilities 静的メソッド呼び出しを使用しないでください com.sun.awt.AWTUtilities.isTranslucencySupported()com.sun.awt.AWTUtilities.setWindowOpacity()com.sun.awt.AWTUtilities.getWindowOpacity()com.sun.awt.AWTUtilities.getWindowShape()com.sun.awt.AWTUtilities.isWindowOpaque()com.sun.awt.AWTUtilities.isTranslucencyCapable() com.sun.awt.AWTUtilities.setComponentMixingCutoutShape() のメソッドは、Java SE 11から削除されました。 java-version-11.yml
org.openrewrite.java.migrate.ReplaceComSunAWTUtilitiesMethods
com.ibm.security.auth.module.Krb5LoginModule クラスを使用しない com.ibm.security.auth.module.Krb5LoginModule クラスは、Java SE 11 では使用できません。 ibm-java.yml
org.openrewrite.java.migrate.Krb5LoginModuleClass
getPeer メソッドを使用しない Java SE APIで、 java.awt.peer パッケージのクラスを返すメソッドは、Java 11からすべて削除された。 ピアがまだ設定されているかどうかを確認するには、Component.isDisplayable() メソッドを使用します。 コンポーネントが軽量であるかどうかをテストするには、Component.isLightWeight() メソッドを使用します。 java-version-11.yml
org.openrewrite.java.migrate.ReplaceAWTGetPeerMethod
java.lang.ref.Reference クローン・メソッドを使用しない java.lang.ref.Reference クローン・メソッドは、Java 11 ではサポートされなくなりました。 java-version-11.yml
org.openrewrite.java.migrate.ReferenceCloneMethod
netdoc URL プロトコルを使用しない netdoc プロトコル・ハンドラーは、Java 11 で削除されました。 いいえ
削除された com.sun.java.browser.plugin2.DOM API と sun.plugin.dom.DOMObject API を使用しない com.sun.java.browser.plugin2.DOM および sun.plugin.dom.DOMObject APIは、Java SE 11では利用できない。 いいえ
削除された com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel および apple.laf.AquaLookAndFeel Swing LookAndFeel を使用しない com.sun.java.swing.plaf.nimbus.NimbusLookAndFeelapple.laf.AquaLookAndFeel Swing LookAndFeels は、Java SE 11 で javax.swing.UIManager.setLookAndFeel メソッドによってサポートされなくなりました。 いいえ
削除された java.lang.Thread.destroy() メソッドまたは java.lang.Thread.stop(java.lang.Throwable) メソッドを使用しない java.lang.Thread.destroy() メソッドと java.lang.Thread.stop(java.lang.Throwable) メソッドは、Java SE 11 で削除されました。 java-version-11.yml
org.openrewrite.java.migrate.ThreadStopDestroy
削除された javax.crypto.ExemptionMechanism.finalize() メソッドを使用しない javax.crypto.ExemptionMechanism.finalize() メソッドは Java SE 11 から削除されました。 いいえ
削除された jdk.Exported アノテーションを使用しない jdk.Exported アノテーションは、Java SE 11 では使用できません。 いいえ
LogManager から削除されたメソッド addPropertyChangeListener または removePropertyChangeListener を使用しない addPropertyChangeListener メソッドと removePropertyChangeListener メソッドは、Java 11 の java.util.logging.LogManager クラスでは使用できません。 いいえ
削除された Runtime.getLocalizedInputStream メソッドと Runtime.getLocalizedOutputStream メソッドを使用しない Runtime.getLocalizedInputStream メソッドと Runtime.getLocalizedOutputStream メソッドは Java SE 11 から削除されました。 java-version-11.yml
org.openrewrite.java.migrate.ReplaceLocalizedStreamMethods
SecurityManager の削除されたメソッドを使用しない この規則により、Java SE 11 で java.lang.SecurityManager クラスから削除されたメソッドにフラグを立てます。 いいえ
SecurityManager の削除されたメソッドを使用しないでください (自動修正機能付き) この規則により、Java SE 11 で java.lang.SecurityManager クラスから削除されたメソッドにフラグを立てます。 このルールには、メソッド呼び出しを更新する自動修正がある。 java-version-11.yml
org.openrewrite.java.migrate.RemovedSecurityManagerMethods
Java 11 バージョン番号のフォーマット変更 Java 11 からバージョン番号の新しい命名規則が始まります。 バージョン番号のフォーマットは 1.8 (Java 8) から 11 (Java 11) に変更されました。 いいえ
FileInputStream および FileOutputStream でオーバーライドされた close メソッドでリソースのクリーンアップを検討する この規則により、java.io.FileInputStream および java.io.FileOutputStream のサブクラスの close() メソッドにフラグを立てます。 いいえ
Java クラス依存関係アナライザー・ツール (JDeps) を実行する JDK には、クラスの依存関係を分析する jdeps というコマンド・ライン・ユーティリティーが付属しています。 このツールを使用して、JDK 11 で使用できなくなった JDK 内部パッケージを特定できます。 いいえ
java.awt.peer パッケージと java.awt.dnd.peer パッケージはアクセス不可 java.awt.peer パッケージと java.awt.dnd.peer パッケージで定義されている型を参照する Java SE API のすべてのメソッドは、Java 11 から削除されました。 以前にこれらのパッケージで定義されている型を受け入れたか返したメソッドを呼び出すコードは、Java 11 でコンパイルも実行もできなくなりました。 いいえ
java.nio.channels.DatagramChannel.send() メソッドは IllegalArgumentException ではなく AlreadyConnectedException をスローする java.nio.channels.DatagramChannelに渡されるアドレスの場合。 send(ByteBuffer,SocketAddress) メソッドが接続されたアドレスと異なる場合、Java SE 11 ではこのメソッドは IllegalArgumentException ではなく AlreadyConnectedException をスローします。 java-version-11.yml
org.openrewrite.java.migrate.IllegalArgumentExceptionToAlreadyConnectedException
java.nio.channels.Selector クラスと java.nio.channels.SelectableChannel クラスは並行スレッドで安全に使用できる java.nio.channels.Selector クラスと java.nio.channels.SelectableChannel クラスは、Java SE 11 で、並行スレッドで安全に使用されるように更新されました。 いいえ
java.transaction モジュールは JDK 11 から削除された この規則により、javax.transaction モジュール内のパッケージを使用するアプリケーションにフラグを立てます。 いいえ
java.xml.bind モジュールと java.activation モジュールは JDK 11 (カスタム実装) から削除された この規則により、java.xml.bind モジュールまたは java.activation モジュール内のパッケージを使用し、独自の JAXB 実装をパッケージするアプリケーションにフラグを立てます。 ibm-java.yml
org.openrewrite.java.migrate.RemovedJaxBModuleProvided
java.xml.bind モジュールと java.activation モジュールは JDK 11 (デフォルト実装) から削除された この規則により、java.xml.bind モジュールまたは java.activation モジュール内のパッケージを使用し、WebSphere のデフォルトの JAXB 実装を使用するアプリケーションにフラグを立てます。 いいえ
JavaFX モジュールは JDK 11 から削除された JavaFX モジュールは、Java SE 11 では使用できません。 いいえ
URLClassLoader コンストラクターと newInstance() 呼び出しは配列にヌル・エレメントが含まれている場合に NullPointerException をスローする Java SE 11 では、URLClassLoader コンストラクターと newInstance() 呼び出しは、URL 配列にヌル・エレメントが含まれている場合、NullPointerException をスローします。 いいえ
Java Web Start テクノロジーは JDK 11 から削除された Java Web Start テクノロジーは、JDK 11 では使用できません。 この規則により、アプリケーション内の jnlp ファイルにフラグを立てます。 いいえ
ForkJoinPool 共通プール・クラス・ローダーの振る舞いの変更 この規則により、アプリケーションのスレッド・コンテキスト・クラス・ローダー伝搬に基づいて動作が異なる可能性があるメソッドにフラグを立てます。 いいえ
Java SE 11の一般情報と潜在的な問題 このルールには、Java SE 11の変更点や、Java SE 11以降にリリースされた以前の非LTS(長期サポート)Javaバージョンに関する情報へのリンクが含まれています。 java-version-11.yml
org.openrewrite.java.migrate.UpgradeToJava8
 

表 4。 Java SE 11 互換性の影響 (Liberty コアではない)
規則名 ルールの説明 自動修正
java.corba モジュールは JDK 11 から削除された この規則により、java.corba モジュール内のパッケージを使用するアプリケーションにフラグを立てます。 いいえ
java.xml.ws モジュールは JDK 11 (カスタム実装) から削除された この規則により、java.xml.ws モジュール内のパッケージを使用し、独自の JAX-WS 実装をパッケージするアプリケーションにフラグを立てます。 ibm-java.yml
org.openrewrite.java.migrate.RemovedJavaXMLWSModuleProvided
java.xml.ws モジュールは JDK 11 (デフォルト実装) から削除された この規則により、java.xml.ws モジュール内のパッケージを使用し、WebSphere のデフォルトの JAX-WS 実装を使用するアプリケーションにフラグを立てます。 いいえ

IBM XML 実装は Java 11 で削除されました。 詳細については、 「アプリケーションの互換性の判断: XML」を参照してください。

表 5. Java SE 11 IBM XML 実装の互換性の影響
規則名 ルールの説明 自動修正
IBM XML 実装の内部パッケージに対する依存関係の検出 この規則は、IBM XML 内部パッケージへの参照にフラグを立てます。 いいえ
IBM XML 実装固有の構成パラメーターへのストリング・リテラル参照の検出 この規則は、IBM XML 実装固有の構成パラメーターへのストリング・リテラル参照にフラグを立てます。 いいえ
IBM XML 実装の内部データへのストリング・リテラル参照の検出 この規則は、IBM XML 実装へのストリング・リテラル参照にフラグを立てます。 いいえ

Java SE 8 互換性の影響

Java 8 は Liberty および WebSphere Application Server traditional V8.5.5.9 以降でサポートされます。

表 6. Java SE 8 互換性の影響
規則名 ルールの説明 自動修正
AWT フォーカス・トラバーサル・キーの設定時の例外の振る舞いの変更 Java 8 では、渡されたキー・ストローク・オブジェクトが AWTKeyStrokeでない場合、 java.awt.Component setFocusTraversalKeys メソッドおよび java.awt.KeyboardFocusManager setDefaultFocusTraversalKeys メソッドは IllegalArgumentException の代わりに ClassCastException をスローします。 いいえ
java.lang.String および java.util.regex.Pattern の各 split メソッドでの振る舞いの変更 Java 8 では、split メソッドの振る舞いによって、返される配列の先頭に存在する空の String が削除される可能性があります。 いいえ
一部の言語の月名のフォーマット設定での振る舞いの変更 Java 8 では、フォーマット設定された日付の月名と独立形式の月名が異なる言語の場合、DateFormat クラスおよび SimpleDateFormat クラスを使用して日時値のフォーマット設定をするときに、コンテキストに依存した月名がサポートされます。 そのため、DateFormat クラスまたは SimpleDateFormat クラスによってフォーマット設定されたストリングで返される月名と、DateFormatSymbols クラス内のメソッドによってフォーマット設定されたストリングで返される月名が異なる場合があります。 いいえ
ほとんどの Collection.removeAll の実装と Collection.retainAll の実装での振る舞いの変更 Java 8 より前では、ほとんどの Collection.removeAll(Collection) の実装と retainAll(Collection) の実装が、そのコレクション自体が空の場合に、false を返して NULL パラメーターを無視します。 Java 8 では、コレクションは、NULL がパラメーターとして指定されたら NullPointerException をスローします。 いいえ
非パブリック・インターフェースの新規インスタンスの作成での振る舞いの変更 Java 8 では、Proxy.getProxyClass メソッドと Constructor.newInstance メソッドを使用して、別のパッケージ内にある非パブリック・インターフェースのプロキシー・インスタンスを作成するには、コードの変更が必要です。 いいえ
NumberFormat および DecimalFormat の各 format メソッドでの丸めの振る舞いの変更 Java 8 では、 NumberFormatDecimalFormat の各 format メソッドの丸めの振る舞いが、数値の 2 進数表現での丸めと一致するよう変更されました。 いいえ
ゼロ値に対する BigDecimal stripTrailingZeros メソッドの振る舞いの変更 Java 8 では、 java.math.BigDecimal stripTrailingZeros がゼロ以外のスケールのゼロ値で動作する場合の動作変更が導入されています。 いいえ
動的プロキシー・クラスの構成での振る舞いの変更 Java 8 では、null パラメーターを使用して java.lang.reflect.Proxy(InvocationHandler) を呼び出すと、NullPointerException がスローされます。 Java 8 より前では、コンストラクターはプロキシーを返しますが、そのプロキシー上でメソッドが呼び出されると、NullPointerException がスローされます。 いいえ
TypeVisitor インターフェースを実装するクラスは、 TypeVisitor.visitIntersection( ) メソッドを実装しなければならない この規則は、このインターフェースを実装するが、visitIntersection(IntersectionType t, P p) メソッドは実装しない Java クラスを検出し、その Java クラスにフラグを立てます。 このJavaインターフェイスを直接実装した visitIntersection メソッドを持たないクラスはコンパイルされない。 いいえ
SocketAddress を持つ DatagramPacket コンストラクターが SocketException をスローしなくなった Java 8 では、SocketException 宣言を削除するよう java.net.DatagramPacket コンストラクターが変更されました。 この規則により、コンストラクターが java.net.SocketException またはそのスーパークラス java.io.IOExceptionのいずれかをキャッチする try ブロック内にある場合に、 java.net.SocketAddress 引数を受け入れる java.net.DatagramPacket コンストラクターにフラグを立てます。 いいえ
登録またはインスタンス化されたMBeansとMXBeansの検出 このルールは、Java 8で要求されるパブリックでないMBeanまたはMXBeanインタフェースにフラグを立てる。 また、 registerMBean または createMBean の呼び出しにフラグを立て、インターフェイスの可視性に関する潜在的な問題を浮き彫りにする。 いいえ
JAXP サービス・プロバイダーのクラス・ロードでの違い Java 8 には、Java API for XML Processing (JAXP) 1.6 が含まれています。これは、前のバージョンとは異なる方法でサービス・プロバイダーのクラス・ロードを処理します。 いいえ
MBean インターフェースと MXBean インターフェースはパブリックでなければならない Java 8 では、MBean 管理インターフェースと MXBean 管理インターフェースがパブリックでなければならないという要件が強制されます。 非パブリック・インターフェースが管理機能を公開することは許可されていません。 この仕様の要件は、Java 7 以前のバージョンでは強制ではありませんでした。 java-version-8.yml
org.openrewrite.java.migrate.MXBeanRule
java.util.concurrent.ConcurrentHashMap の新規メソッド Java 8 では、ConcurrentHashMap クラスに 30 個を超える新規メソッドが導入されました。 java.util.concurrent.ConcurrentHashMap クラスを拡張する場合は、ご使用のクラスに変更が必要になる場合があります。 いいえ
ロケール・サービス・プロバイダーの選択メカニズムの変更 Java 8 では、ロケール・サービス・プロバイダーの選択メカニズムが変更されました。 LocaleServiceProvider クラス内の新規メソッドを使用することで、所定のロケールがサポートされているかどうかを実装が判断できるようになりました。 いいえ
sun.io パッケージに含まれる API を使用しない sun.io.* APIはJava SE 8で削除された。 このAPIを置換または削除する。 いいえ
java.lang.Thread.stop(java.lang.Throwable) が使用不可になっている このルールは java.lang.Thread.stop(java.lang.Throwable) メソッド invocations.When にフラグを立て、このメソッドを呼び出すと UnsupportedOperationException を投げる。 いいえ

Java SE 7 互換性の影響

表 7. Java SE 7 互換性の影響
規則名 ルールの説明 自動修正
空の TreeSet add メソッドおよび TreeMap put メソッドの振る舞いの変更を確認する この規則により、java.util.TreeSet または java.util.TreeMap の使用にフラグを立てます。 規則の構成に応じて、これらのクラスのコンストラクターまたは add()/put() メソッドにフラグが立てられます。 Java 7 ではこれらのメソッドに新しい振る舞いが追加されています。 いいえ
AWT 例外ハンドラーの振る舞いの変更を確認する この規則により、ストリング・リテラル sun.awt.exception.handler にフラグを立てます。 Java 7 では、新しい例外ハンドリング・メカニズムが追加されています。 いいえ
File setReadOnly、setWritable、および canWrite の各メソッドの振る舞いの変更を確認する この規則により、メソッド java.io.File setReadOnly()setWritable(boolean arg) 、および setWritable(boolean arg, boolean user)にフラグを立てます。 Java 7 ではこれらのメソッドに新しい振る舞いが追加されています。 いいえ
URLConnection または HttpURLConnection の getInputStream メソッドの振る舞いの変更を確認する この規則により、URLConnection または HttpURLConnectiongetInputStream() メソッド> にフラグを立てます。 Java 7 では、このメソッドに新しい振る舞いが追加されています。 いいえ
DatagramChannel の send、receive、および connect の各メソッドの振る舞いの変更を確認する この規則により、Java 7 で新しい振る舞いが追加されている java.nio.channels.DatagramChannel sendreceive、および connect の各メソッドの呼び出しにフラグを立てます。 いいえ
isLowerCase および isUpperCase メソッドでの振る舞いの変更を確認する この規則により、isLowerCase メソッドと isUpperCase メソッドにフラグを立てます。 これらのメソッドの振る舞いの変更がアプリケーションに影響することがごくわずかにあります。 いいえ
Locale getDefault メソッドでの振る舞いの変更を確認する この規則は、java.util.Locale getDefault() メソッドの呼び出しにフラグを立てます。これは、このメソッドが新しい振る舞いを持っているからです。 いいえ
MouseEvent getButton メソッドでの振る舞いの変更を確認する この規則は、java.awt.event.MouseEvent getButton() メソッドのインスタンスにフラグを立てます。これは、このメソッドが新しい振る舞いを持っているためです。 いいえ
ThreadGroup setMaxPriority メソッドでの振る舞いの変更を確認する この規則により、ThreadGroup オブジェクトの setMaxPriority メソッドにフラグを立てます。 JDK 7 では、このメソッドの振る舞いが変更されました。 いいえ
Toolkit getPrintJob メソッドでの振る舞いの変更を確認する この規則は、java.awt.Toolkit getPrintJob(...) メソッドのインスタンスにフラグを立てます。これは、このメソッドが新しい振る舞いを持っているためです。 いいえ
Window setBackground メソッドでの振る舞いの変更を確認する この規則は、java.awt.Window setBackground() メソッドの呼び出しにフラグを立てます。これは、新しい例外をスローすることで、その振る舞いが変更されたからです。 いいえ
TypeVisitor インターフェースを実装するクラスを確認する この規則により、javax.lang.model.type.TypeVisitor インターフェースを実装しているクラスにフラグを立てます。 Java SE 7 では、このインターフェースに新しいメソッドが追加されました。 いいえ
JDBC インターフェースの新しいメソッドを確認する この規則は、新しいメソッドを追加した JDBC インターフェースを実装しているクラスを検出します。 このインターフェースには、java.sql.Connectionjava.sql.Driverjava.sql.Statement、および javax.sql.CommonDataSource が含まれます。 java-version-7.yml
org.openrewrite.java.migrate.JREJdbcInterfaceNewMethods
java.lang.Throwable で final として宣言されたメソッドを定義しない

この規則は、Java 7 で新しい final メソッドとして追加されたメソッド addSuppressed および getSuppressed を実装する java.lang.Throwable を拡張するクラスを検出します。

java-version-7.yml
org.openrewrite.java.migrate.JREThrowableFinalMethods
Path2D getPathIterator メソッドをオーバーライドしない この規則により、Path2D getPathIterator メソッドにフラグを立てます。 Java 7 ではこれらのメソッドは final とマークされるようになりました。 いいえ
削除された XSLTProcessorApplet クラスを使用しない この規則は、org.apache.xalan.client.XSLTProcessorApplet クラスの使用を検出します。 このクラスは JDK 7 リリースから削除されました。 いいえ
LinkedHashMap.Entry クラスを使用しない java.util.LinkedHashMap.Entry クラスは Java SE 7 ではアクセスできなくなったため、 この規則は、そのクラスの使用にフラグを立てます。 いいえ

Java SE 6 互換性の影響

表 8。 Java SE 6 互換性の影響
規則名 ルールの説明 自動修正
EventHandler への呼び出しの例外ロジックを確認する

Java SE 6 では、EventHandler コンストラクターと create() メソッドには NULL 以外のパラメーターが渡される必要があります。 この規則により、ロジックが NullPointerException を適切に処理することを検証できるように、コンストラクターおよび create() メソッド呼び出しにフラグを立てます。

いいえ
Duration と XMLGregorianCalendar equals() メソッドの互換性を確認する

DurationXMLGregorianCalendar equals() メソッドの使用を検出します。 Java 6 では、渡されたパラメーターが NULL の場合に FALSE が戻されるようになりました。 以前は、例外 NullPointerException がスローされました。

いいえ
Java SQL インターフェースでの新規メソッドを確認する

いくつかの Java SQL インターフェースに、java.sql.Wrapper インターフェースがスーパーインターフェースとして追加されました。 Java 6 に移行する場合は、java.sql.Wrapper が追加されたインターフェースを実装するクラスに、欠落しているメソッドを追加する必要があります。

java-version-6.yml
org.openrewrite.java.migrate.JREWrapperInterface
FileChannel lock() メソッドの OverlappingFileLockException を確認する

Java SE 6 では、FileChannel.lock() メソッドが OverlappingFileLockException をスローします。 この規則は、lock() メソッドの呼び出しで OverlappingFileLockException に対する catch ブロックがない場合、またはメソッドに OverlappingFileLockException の throws 宣言がない場合、その呼び出しにフラグを立てます。

いいえ
JMX ObjectName エレメント内のダブルスラッシュの使用を削除する

JMX ObjectNames のドメイン内でのダブルスラッシュ文字ストリング ("//") の使用を検出します。

いいえ

Oracle から IBM への互換性の影響

アプリケーションを Oracle Java ランタイム環境から IBM Java ランタイム環境に マイグレーションする場合は、以下の規則を実行してください。 Oracle Java ランタイムを使用して Liberty サーバーを実行する 場合は、以下の規則のクイック・フィックスを実行しないでください。

表 9。 Oracle から IBM への互換性の影響
規則名 ルールの説明 自動修正
com.sun.net.ssl.internal パッケージを検出する この規則により、使用可能ではなく使用してはならない Java ファイルの特定の com.sun.net.ssl.internal パッケージの import ステートメントにフラグを立てます。 いいえ
com.sun.net.ssl パッケージから API を使用しない この規則は、 com.sun.net.ssl パッケージ内のクラスおよびインターフェースが、 javax.net.ssl パッケージ内のクラスおよびインターフェースに置き換えられたことを検出します。 ibm-java.yml
org.openrewrite.java.migrate.JREDoNotUseSunNetSslAPIs
com.sun.org.apache JAXP 内部クラスを使用しない この規則により、IBM Java ランタイム環境で使用可能ではない内部 Sun JAXP クラスにフラグを立てます。 いいえ
ストリング・リテラルで com.sun.org.apache JAXP パッケージ名を使用しない この規則は、ストリング・リテラルで使用されている com.sun.org.apache JAXP 1.3 パッケージ名を検出します。 いいえ
com.sun.net.ssl.internal.ssl.Provider クラスを使用しない この規則により、com.ibm.jsse.IBMJSSEProvider に置き換えられる必要がある com.sun.net.ssl.internal.ssl.Provider クラスにフラグを立てます。 ibm-java.yml
org.openrewrite.java.migrate.JREDoNotUseSunNetSslInternalSslProvider
com.sun.net.ssl.internal.www.protocol.https.Handler クラスを使用しない この規則により、 com.ibm.net.ssl.www2.protocol.https.Handlerに置き換える必要がある com.sun.net.ssl.internal.www.protocol.https.Handler クラスにフラグを立てます。 ibm-java.yml
org.openrewrite.java.migrate.JREDoNotUseSunNetSslInternalWwwProtocolHttpsHandler
com.sun.net.ssl.internal.www.protocol パッケージを使用しない この規則により、com.ibm.net.ssl.www2.protocol に置き換えられる必要がある com.sun.net.ssl.internal.www.protocol パッケージ参照にフラグを立てます。 ibm-java.yml
org.openrewrite.java.migrate.JREDoNotUseSunNetSslInternalWwwProtocol

Sun の内部 API

アプリケーションを Oracle Java ランタイム環境から IBM クラスを含む IBM Java ランタイムに マイグレーションする場合にのみ、以下の規則を実行してください。 例えば、WebSphere Application Server に付属する HP-UX および Solaris の Java ランタイム環境には、IBM クラスは含まれません。 この規則は、自動ではどの規則セットによっても選択されません。

表 10。 Sun の内部 API
規則名 ルールの説明 自動修正
sun.security.x509 パッケージから API を使用しない 一部のオペレーティング・システムでは、sun.security.x509 パッケージのクラスおよびインターフェースは、com.ibm.security.x509 パッケージのクラスおよびインターフェースに置き換えられます。 いいえ