与Java分手:成本和复杂性值得吗?

移除 Java 可能是一个复杂的过程,因为编程语言和工具包在您的应用程序和基础架构中无处不在。

译自 Breaking Up With Java: Is the Cost and Complexity Worth It?,作者 Simon Ritter。

Oracle Java 的许可和定价挑战迫使公司探索替代方案的背景下,许多公司正在考虑迁移到 OpenJDK 发行版。

然而,一些公司甚至考虑将他们的业务应用程序重构到 另一种编程语言,以避免 Oracle 带来的风险和持续的不确定性。在四年内四次许可和定价政策变更,这种不确定性不太可能很快停止。

以下是对选择将整个应用程序资产从 Java 中移除所涉及的实际风险和收益的清晰概述,以便您能够正确了解此决定的影响和不切实际的性质。

神话:摆脱 Java 比处理 Java 的许可和定价风险更容易。如果 Oracle 在 Java 上制造问题,请移除问题的根源并使用另一种编程语言。

现实:摆脱 Java 很困难。重写代码可能需要数年时间,并且存在代码无法提供相同功能并可能包含新错误的固有风险。认真考虑用另一种语言重写的组织通常会得出结论,存在更好、更实惠的替代方案。

如果 Oracle 的定价、许可和执行策略变得过于繁重,一些公司可能会想要放弃,并考虑完全移除 Java。除了 Java 由于其经过验证的速度、规模、稳定性、安全性以及季度功能增强和升级而成为大多数企业应用程序的既定方案之外,它也是大多数组织开发人员队伍的核心技能。重构和重新开始将对您内部的应用程序程序员产生严重后果,因为团队要么需要 学习其他编程语言,要么被替换。

抛开所有这些,移除 Java 本身可能是一个复杂的过程,因为这种编程语言和工具包在您的应用程序和基础设施中无处不在。

例如,流行的 框架和工具,如 Spring、Struts、Google Web Toolkit、Grails、Vaadin 和 Apache Log4J 都依赖于作为“Oracle Java”核心的 Java 开发工具包 (JDK)。像 Apache Tomcat、Jetty 和 Wildfly/JBoss 这样的 Web 服务器也依赖于 JDK。Kafka、Hbase 和 Solr 等基础设施也是如此。这些程序中的每一个都有其优势,需要用另一种语言替换,您需要验证切换是否值得。

如果您需要在 Oracle 将您迁移到昂贵的许可计划之前摆脱 Oracle Java,那么现在是时候找到一个价格合理的 Oracle Java SE 替代方案,该方案提供版本与版本兼容性和相同及时的更新。

如果您选择继续移除 Java,以下是一些您需要克服的挑战:

为什么移除 Java 如此困难?

以下是在生产环境中移除 Java 时的一些典型挑战:

  • 识别所有依赖于 Java 的应用程序:这可能很困难,尤其是在大型和复杂的环境中。审查应用程序清单、采访应用程序所有者并扫描系统以查找 Java 应用程序。您还可以搜索 Java 关键字,例如 class、interface、method 和 variable。
  • 更新应用程序以使用另一种编程语言或平台:这可能是一个耗时且昂贵的过程。重构代码——引入改进可读性或互操作性的增量更改,而不会改变代码的工作方式——可能很复杂。用另一种语言完全重写代码是一项可能需要数年时间才能完成的任务,具体取决于环境的大小和复杂性。
  • 测试应用程序以确保它们在新的语言上仍然可以工作:这对于避免中断关键业务应用程序非常重要。确定应用程序是否将在没有 Java 的情况下继续运行,并识别从移除 Java 中可能发生的任何潜在风险或中断。Java 代码依赖于基于 Java 的库和应用程序。

降低 OpenJDK 迁移中的风险

组织可以采取措施来降低发生灾难性事件的风险。这些步骤包括:

  • 创建环境备份:这将允许您在出现问题时恢复环境。
  • 一次从一台服务器中删除 Java:这将帮助您在从整个环境中删除 Java 之前识别和解决任何问题。
  • 监控 Java 删除后的应用程序:这将帮助您识别可能出现的任何问题。
  • 用另一种语言的等效代码替换 Java 代码:这可以通过使用代码转换器或手动编写代码来完成。
  • 测试代码以确保它仍然有效:这可以通过运行代码并检查错误来完成。

重构 Java 代码的艺术

如上所述,重构 Java 代码存在风险并需要时间。大多数大型企业会发现自己需要重构来自多个 Java 发行版和版本的代码。

留在 Java 上的公司可能拥有熟悉代码的人员来进行重构。然而,用其他语言替换 Java 则要复杂得多,可能需要大量新人才或承包商团队。这两种途径都可能很昂贵、耗时且有风险。

处理 Java 依赖项

Java 应用程序通常依赖于许多不同的库和框架。如果删除了其中一个依赖项,则可能会破坏应用程序。循环依赖会导致问题,包括相互依赖模块的紧密耦合,这会影响单独使用每个模块的能力。

以下是 Java 依赖项可能导致删除 Java 变得困难的一些具体原因:

  • 版本冲突:不同版本的库可能彼此不兼容。如果您删除一个库并将其替换为更新的版本,您可能还需要更新应用程序中的其他库。
  • 缺少依赖项:如果您删除了应用程序中其他库所依赖的库,那么这些库将不再起作用。您需要找到并安装所有缺少依赖项的替换库。
  • 循环依赖:两个库可能相互依赖。如果您删除了其中一个库,您还需要删除另一个库。这会产生连锁反应,您需要删除越来越多的库,直到删除所有循环依赖项。

您可以采取一些措施来简化删除 Java 依赖项的过程:

  • 使用依赖项管理工具:依赖项管理工具可以帮助您跟踪应用程序依赖的库以及哪些版本的库彼此兼容。
  • 使用构建工具:构建工具可以帮助您自动化更新和删除库的过程。
  • 彻底测试您的应用程序:在删除库之前,请确保彻底测试您的应用程序,以确保它仍然有效。

结论

从公司生产环境中删除 Java 的难度取决于许多因素,包括环境的大小和复杂性、依赖 Java 的应用程序数量以及 IT 人员的专业水平。一般来说,从生产环境中删除 Java 是一个复杂且耗时的过程。重要的是要仔细计划和执行删除过程,以避免中断关键业务应用程序。

请记住,Java 仍然是世界上最流行的编程语言之一,因为它具有灵活性、易用性和互操作性。

Azul Java 状态调查和报告 2023 中,98% 的受访者在他们的软件应用程序或基础设施中使用 Java,57% 的受访者表示他们的大多数应用程序都是基于 Java 的。将此数字与基于 Java 的框架、库和基于 JVM 的语言相结合,很明显 Java 继续在现代企业中发挥着重要作用。

删除 Java 的难度是否意味着您必须永远与 Oracle 合作以满足您的 Java 需求?当然不是。有许多 TCK(技术兼容性工具包)认证的 OpenJDK 发行版可用,包括 Azul Platform Core

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注