【问题标题】:What is the preferred method to ship a java program with an older version of java?使用旧版本的 java 发布 java 程序的首选方法是什么?
【发布时间】:2015-08-03 00:17:52
【问题描述】:

我的任务是修复一个用 java 编写的程序,因为它在启动时崩溃了。我发现这个问题与 1.8 中不再可用的 java 库中的一个已停止的类有关。 最终我会找到该库的替代方案,但现在我需要参考未安装在客户端计算机上的旧 Java 版本来发布程序。这样做最合适的方式是什么?

【问题讨论】:

  • 首选方法是:不允许这种情况发生。这个类要么仍然存在,要么从最早的时候就被弃用了,给你十多年的警告。话虽如此,如果我没记错的话,可以嵌入 JRE,但这意味着使应用程序平台依赖,并为每个平台提供一个版本。我的建议:解决问题。
  • 您可以尝试检查使用的 Java 版本,如果不匹配则停止执行,然后通知用户提供所需的版本(可能是范围)。请参阅此处了解如何获取版本:stackoverflow.com/questions/2591083/…
  • 如果您使用的是 sun.* 类,这正是不建议这样做的原因。
  • 我知道伙计们,不推荐。我没有创建该程序,一位同事很久以前就创建了。是的,它是一个太阳类。
  • 您可以将 sun 类添加到您自己的项目中并让它做正确的事情,直到您有时间实际修复它。很可能是 Base64 或类似的。

标签: java include java-8 version


【解决方案1】:

显然,您希望对代码库的其余部分产生最小的影响,而您不想修改代码中可能大量的导入。因此,如果客户端计算机上未安装 Java 版本,则需要在应用程序的打包中包含该类。

我建议您创建丢失的类文件当前所在位置的包结构,例如java.io.x.y.z,这样您就不必修改任何导入语句

例如import java.io.x.y.z.ClassName;

然后进行测试测试以确保它按预期运行。

【讨论】:

    【解决方案2】:

    JRE 可以随程序一起分发。因此,重新打包您的程序以捆绑 JRE 并从那里使用 java 二进制文件来启动您的程序。

    如果您使用包装脚本,这将是修复它的地方。

    【讨论】:

      【解决方案3】:

      您可以使用新的 javapackager 工具并指定运行时选项以包含(捆绑)特定 JRE。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-29
        • 1970-01-01
        • 2023-01-23
        • 1970-01-01
        相关资源
        最近更新 更多