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までのすべての互換性への影響が含まれる。
| 規則名 | ルールの説明 | 自動修正 |
|---|---|---|
| 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_Profile、java.awt.image.ColorModel、java.awt.image.IndexColorModelクラスでfinalize()メソッドを使うことにフラグを立てます。 |
java-version-21.yml org.openrewrite.java.migrate.DeleteDeprecatedFinalize |
| 劣化した ThreadGroup メソッドの使用を避ける | このルールは、ThreadGroup.setDaemon、ThreadGroup.isDaemon、ThreadGroup.destroy、ThreadGroup.isDestroyedメソッドの使用にフラグを立てる。 |
いいえ |
Java SE 17 互換性の影響
Java 17 は、Liberty 21.0.0.10 以降でサポートされています。 Java SE 17 互換性の影響には、Java SE バージョン 12 から 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.Packer 、 java.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.X509Certificate、java.security.cert.X509CRL、java.security.cert.X509CertSelector、および java.security.cert.X509CRLSelector 内の getIssuerDN、getSubjectDN、getIssuerDN、setIssuer、setSubject、getIssuerAsString、getSubjectAsString、および 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 パッケージは削除予定のため非推奨 |
|
java-version-17.yml org.openrewrite.java.migrate.DeprecatedJavaxSecurityCert |
| Thread.countStackFrames() メソッドは無条件に UnsupportedOperationException をスローするように変更された | 最終的に非推奨となったメソッド |
java-version-17.yml org.openrewrite.java.migrate.DeprecatedCountStackFramesMethod |
| 削除された RMI アクティブ化パッケージを使用しない |
|
いいえ |
| 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 以降でサポートされます。
| 規則名 | ルールの説明 | 自動修正 | |
|---|---|---|---|
| 非推奨の 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 インターフェースで削除されたメソッドを確認する | addPropertyChangeListener と removePropertyChangeListener は、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.BASE64Encoderとsun.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.NimbusLookAndFeel と apple.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 |
| 規則名 | ルールの説明 | 自動修正 |
|---|---|---|
| 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」を参照してください。
| 規則名 | ルールの説明 | 自動修正 |
|---|---|---|
| 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 以降でサポートされます。
| 規則名 | ルールの説明 | 自動修正 |
|---|---|---|
| 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 では、
NumberFormat と DecimalFormat の各 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 互換性の影響
| 規則名 | ルールの説明 | 自動修正 |
|---|---|---|
| 空の 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 または HttpURLConnection の getInputStream() メソッド> にフラグを立てます。 Java 7 では、このメソッドに新しい振る舞いが追加されています。 |
いいえ |
| DatagramChannel の send、receive、および connect の各メソッドの振る舞いの変更を確認する | この規則により、Java 7 で新しい振る舞いが追加されている java.nio.channels.DatagramChannel send、receive、および 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.Connection、java.sql.Driver、java.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 互換性の影響
| 規則名 | ルールの説明 | 自動修正 |
|---|---|---|
| EventHandler への呼び出しの例外ロジックを確認する | Java SE 6 では、EventHandler コンストラクターと create() メソッドには NULL 以外のパラメーターが渡される必要があります。 この規則により、ロジックが NullPointerException を適切に処理することを検証できるように、コンストラクターおよび create() メソッド呼び出しにフラグを立てます。 |
いいえ |
| Duration と XMLGregorianCalendar equals() メソッドの互換性を確認する | Duration と XMLGregorianCalendar 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 サーバーを実行する 場合は、以下の規則のクイック・フィックスを実行しないでください。
| 規則名 | ルールの説明 | 自動修正 |
|---|---|---|
| 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 クラスは含まれません。 この規則は、自動ではどの規則セットによっても選択されません。
| 規則名 | ルールの説明 | 自動修正 |
|---|---|---|
| sun.security.x509 パッケージから API を使用しない | 一部のオペレーティング・システムでは、sun.security.x509 パッケージのクラスおよびインターフェースは、com.ibm.security.x509 パッケージのクラスおよびインターフェースに置き換えられます。 |
いいえ |