只有Java 11 JRE可用时如何运行Java 8 jar文件

5

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

我想在一个托管机器上运行这个第三方jar文件,但我无法控制该机器。它安装了Java 11,我不被允许在其上安装Java 8。

我看到这个答案,它说解决此问题的方法是使用附加依赖项重新构建应用程序以替换Java 11 jre中删除的Java EE包。不幸的是,我不能使用该答案,因为我没有访问源代码。那么,我可以使用-classpath参数来解决这个问题吗?


3
您提供的答案描述了可以获取类(或JAR)的位置。您无需重新构建应用程序,只需要构建提供这些类的库(我不知道答案中列出的项目中哪个是您所需的),然后将JAR文件添加到类路径中。由于javax.…不是安全模型中保留的包名称,因此这可以正常工作。 - Holger
2个回答

6
如果是可运行的jar文件,则其中有一个“META-INF/MANIFEST.MF”文件来设置类路径。您不需要源代码,只需解压缩jar文件,在“MANIFEST.MF”文件的“Class-Path”中添加所需的额外第三方jar文件的条目,并将其重新打包。然后与额外的第三方jar文件一起发布jar文件。 示例 假设您的“foo.jar”文件使用JAF (java.activation),即需要将“javax.activation-1.2.0.jar”添加到类路径中。编辑“MANIFEST.MF”文件,将“javax.activation-1.2.0.jar”添加到“Class-Path”值的末尾,用空格与现有值分隔。如果没有“Class-Path”,则添加它:
Class-Path: javax.activation-1.2.0.jar

然后将更新的foo.jar和新的javax.activation-1.2.0.jar文件一起打包,放置在同一文件夹下。


0

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


尽管你的评论是正确的,但它并没有为该问题提供解决方案。 - Silviu Burcea
2
答案是正确的,但是类路径可以被替换,不使用“-jar”,所以这个答案并不是很有用。 - Andreas
1
绕过也是一种解决方案。也许不够优雅,但它确实是一种解决方案。当有绕过的方法可用时,简单地说“无法完成”是误导性的。 - Andreas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接