运行 Java 8 jar 只有 Java 11 JRE 可用

Running Java 8 jar when only Java 11 JRE is available

我有一个第三方可执行 jar 文件,但我无权访问其源代码。它是用 Java 8 编译的,它使用一些 javax 包进行 XML 处理。这些在 Java EE 中,并已从 Java SE 的最新版本中删除。

我想 运行 我无法控制的主机上的这个第三方 jar 文件。它已安装 Java 11,我不允许在其上安装 Java 8。

我看到 说解决这个问题的方法是用额外的依赖项重建应用程序以替换从 [=22= 中删除的 Java EE 包] 11 岁。不幸的是,我无法使用该答案,因为我无权访问源代码。我可以改为使用 java -jar 命令的 -classpath 参数来解决这个问题吗?

java -jar 不允许设置自定义类路径。

如果它是一个可运行的 jar,那么它有一个设置类路径的 META-INF/MANIFEST.MF 文件。

您不需要源代码。只需解压 jar 文件,将所需的额外第三方 jar 的额外条目添加到 MANIFEST.MF 文件中的 Class-Path,然后将其备份。

然后将 jar 文件与其他第三方 jar 一起发送。


例子

假设您的 foo.jar 文件使用 JAF (java.activation),即它需要 javax.activation-1.2.0.jar 添加到类路径中。

编辑 MANIFEST.MF 文件并将 javax.activation-1.2.0.jar 添加到 Class-Path 值的末尾,用 space 与现有值分隔。如果没有Class-Path,则添加:

Class-Path: javax.activation-1.2.0.jar

然后发送更新的 foo.jar 和新的 javax.activation-1.2.0.jar 文件,放在同一个文件夹中。