从 Java 8 开始,JDK 附带了一个名为 jdeps(Java 类依赖关系分析器)的命令行实用程序。jdeps 命令将分析类依赖关系并提供额外的参数来标记内部 JDK 包。虽然 WebSphere 迁移工具也可以标记在应用程序中找到的大多数迁移问题,但是 jdeps 工具可以另外检测在迁移到新的 Java 版本后不再可用的内部 JDK 包。
建议在解决了由二进制或源 WebSphere 迁移工具标记的问题后,运行 jdeps 命令作为最后一步。针对应用程序 Java 工件运行 jdeps 命令。为确保结果准确无误,请将计划的目标 JDK 安装(例如 JDK 11)中可用的 jdeps 命令与 -jdkinternals 参数结合使用。例如,在将环境设置为使用 Java 11 后,请运行以下命令:
| jdeps -jdkinternals C:\demo\Apps\myapplication.jar |
从 Java 9 开始,将会限制对大多数 JDK 内部项的访问。但是,为了方便迁移,缺省情况下对 Java 8 中存在的 API 关闭了强封装。从 Java 16 开始,将 --illegal-access 启动程序选项的缺省值设置为 deny,而不是 permit。虽然不建议,但是可通过指定 --illegal-access=permit 在 Java 16 中绕过此限制。--illegal-access 也可以设置为 warn 或 debug 以实现与 permit 相同的效果,但是在使用 warn 时会发出警告消息,并且在使用 debug 时会对非法反射访问操作进行堆栈跟踪。
迁移到 Java 17 或更高版本时,--illegal-access 启动程序选项已过时。现在,已对大多数 JDK 内部项进行强封装。虽然不建议,但可以使用 --add-opens 启动程序选项或 Add-Opens JAR 清单属性打开应用程序或第三方库所需要的特定包以绕过此限制。
此更改未封装的某些关键内部 API 包括以下项:
该实用程序将生成输出来标识对 JDK 内部类的引用,并尽可能提供建议的替换 API。注:jdeps 命令仅接受 .class 文件、目录或 JAR 文件。
有关 jdeps 命令的更多信息,请参阅 jdeps 参考页面。