返回
2026/10/12
大多数迁移项目都始于一个决定:从 Oracle Java SE 迁移到 OpenJDK、替换已停止支持(EOL)的 Linux 发行版,或将服务器整合到私有云。计划在纸面上通常看起来很简单。但随后项目团队会发现无人知晓的 Java 运行时、无人负责的服务器,以及悄悄依赖旧版本的应用程序。于是工期延误,预算增加。
避免这种情况的方法是从现状调查(discovery)入手:基于事实,完整盘点实际安装了什么。本文介绍需要收集哪些信息、如何在 Windows 和 Linux 上收集、可能遇到哪些意外情况,以及如何将结果转化为迁移计划。
要点
- 在规划任何迁移之前,先建立完整的 Java 与 Linux 资产清单。
- 为每个运行时记录完整版本号、供应商、路径和负责人。
- 除了软件包列表,还要搜索文件系统:许多运行时是直接解压的,或随应用程序捆绑提供。
- 将结果分为四组(移除、替换、协调、调查),并据此制定计划。
为什么现状调查要先于迁移
迁移的质量取决于其所依据的信息。没有资产清单,就只能凭记忆、旧的电子表格和许可证记录来估算范围,而这些都无法反映当前实际运行的情况。
一份完善的资产清单能带来三方面的价值:
- 范围:受影响的机器、运行时和应用程序数量,便于切实估算工作量和成本。
- 风险:哪些系统运行着不受支持或未打补丁的版本,哪些系统对业务至关重要。
- 归属:每个系统由谁负责,使测试和验收都有明确的负责人。
在许可证谈判中,它也能为您提供保障。如果供应商询问您有多少安装,一份最新的资产清单可以让您用事实而非猜测来回答。
需要收集什么:版本、供应商、路径和负责人
对于每一个 Java 安装,至少收集以下信息:
- 主机:机器名、IP 地址,以及它是服务器、虚拟机还是桌面电脑。
- 版本:完整的版本字符串,例如 1.8.0_202 或 17.0.10,而不仅仅是“Java 8”或“Java 17”。
- 供应商:运行时由谁构建,例如 Oracle 或某个 OpenJDK 发行版。仅凭版本号无法判断这一点。
- 类型和路径:是完整的 JDK 还是仅有 JRE,以及其安装目录。
- 用途:如果能查明的话,哪些应用程序或服务在使用它。
- 负责人:负责该机器或应用程序的团队或个人。
对于 Linux 服务器,还应收集发行版及其版本、内核版本、主要已安装软件包和正在运行的服务。这样您就能知道哪些服务器除了 Java 迁移之外,也属于 Linux 迁移的范围。
Windows、Linux 与桌面电脑:不同的方法
每种环境需要的方法略有不同。下面的命令只是起点;在实践中,团队通常会将它们封装成脚本,并借助现有的管理工具在所有机器上运行。
Windows 服务器
已安装的 Java 运行时通常会在 Windows 注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft 下注册,但并非全部如此。搜索文件系统更为可靠:
Get-ChildItem -Path C:\ -Filter java.exe -Recurse -ErrorAction SilentlyContinue |
Select-Object FullName, @{n='Version'; e={$_.VersionInfo.ProductVersion}}
请检查所有驱动器,而不仅仅是 C:,因为应用服务器通常安装在单独的数据驱动器上。
Linux 服务器
在 Linux 上,应将包管理器与文件搜索结合使用,因为许多 Java 运行时是从压缩包解压而来,而不是以软件包形式安装的:
cat /etc/os-release
rpm -qa | grep -i -E 'jdk|jre|java'
find / -xdev -type f -name java -perm -u+x 2>/dev/null
在 Debian 或 Ubuntu 上,请使用 dpkg -l | grep -i -E 'jdk|jre' 代替 rpm。对找到的每个 java 可执行文件加上 -version 参数运行,即可显示版本,通常还会显示供应商。大多数 JDK 目录中还有一个 release 文件,其中注明了实现方(implementor)。
桌面电脑
桌面电脑是资产清单中最常被遗忘的部分。开发人员会自行安装 JDK,业务应用程序有时也会静默安装 Java 运行时。由于桌面电脑数量众多,应尽可能使用终端管理工具的软件清单,仅在缺少相关信息时才运行轻量级脚本。
常见的意外情况(捆绑的 JRE、被遗忘的服务器)
几乎每个现状调查项目都会发现一些出乎意料的东西。最常见的有:
- 捆绑的运行时:许多商业应用程序会在其安装目录中自带专用的 Java 运行时。它可能不会出现在注册表或任何软件包列表中。
- 一台机器上有多个版本:安装新运行时时,旧版本很少被删除,因此一台服务器上可能有三四个运行时。
- 被遗忘的服务器:从未下线的测试机、旧的批处理服务器和虚拟机,往往运行着过时且未打补丁的版本。
- 负责人不明:无人认领的机器。即使最终决定是关停,也需要在迁移开始前做出决定。
提示:捆绑的运行时通常需要通过应用程序供应商来处理,而不能直接替换,因此请将其与您自行管理的运行时分开记录。
从资产清单到迁移计划
数据收集完成后,将其汇总到一处,并与各系统负责人一起审核。然后将这些安装分为以下几类:
| 分组 | 包含内容 | 处理方式 |
|---|---|---|
| 移除 | 已不再使用的运行时 | 立即卸载,以降低风险和许可证风险敞口 |
| 替换 | 您自行管理的运行时 | 经过测试后迁移到受支持的 OpenJDK 构建版本 |
| 协调 | 与第三方应用程序捆绑的运行时 | 先获取应用程序供应商的支持声明 |
| 调查 | 任何没有负责人或用途不明的项目 | 找到负责人,或决定将其关停 |
根据这些分组,您可以制定切实可行的时间表:先从低风险系统开始以验证流程,然后在具备经过测试的回滚方案的前提下,再推进到关键业务系统。
提示:在最终切换之前,请再次运行现状调查扫描。在长期项目中,环境会发生变化,也会出现新的安装。
LOGIQ 如何提供帮助
LOGIQ 为 Java 和 Linux 环境开展现状调查与迁移项目,所使用的脚本和流程已在 Windows 服务器、Linux 服务器和桌面电脑上的真实客户项目中不断完善。如果您需要帮助建立资产清单或将其转化为迁移计划,请联系 LOGIQ。
Global
Japan
Korea
Taiwan
Vietnam
Thailand
Indonesia
Portugal
Spain
France
Germany
Egypt
Russia