运行 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
文件,放在同一个文件夹中。
我有一个第三方可执行 jar 文件,但我无权访问其源代码。它是用 Java 8 编译的,它使用一些 javax 包进行 XML 处理。这些在 Java EE 中,并已从 Java SE 的最新版本中删除。
我想 运行 我无法控制的主机上的这个第三方 jar 文件。它已安装 Java 11,我不允许在其上安装 Java 8。
我看到 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
文件,放在同一个文件夹中。