简体   繁体   中英

Running Java 8 jar when only Java 11 JRE is available

I have a third-party executable jar file which I don't have access to the source code of. It was compiled with Java 8 and it uses some javax packages for XML processing. These are in Java EE and have been removed from recent versions of Java SE.

I want to run this third-party jar file on a host machine that I don't have control over. It has Java 11 installed and I'm not allowed to install Java 8 on it.

I've seen this answer which says that the way to solve this issue is to rebuild the application with additional dependencies to replace the Java EE packages that were removed from the Java 11 jre. Unfortunately, I can't use that answer because I don't have access to the source code. Can I instead use a -classpath argument to the java -jar command to solve this?

If it is a runnable jar, then it has a META-INF/MANIFEST.MF file that sets up the classpath.

You don't need the source code. Just unjar the jar file, add extra entries for the required additional third-party jars to the Class-Path in the MANIFEST.MF file, and jar it back up.

Then ship the jar file together with the additional third-party jars.


Example

Say your foo.jar file uses JAF (java.activation), ie it needs javax.activation-1.2.0.jar added to the classpath.

Edit the MANIFEST.MF file and add javax.activation-1.2.0.jar to the end of the Class-Path value, separated from existing values with a space. If there is no Class-Path , add it:

Class-Path: javax.activation-1.2.0.jar

Then ship the updated foo.jar and the new javax.activation-1.2.0.jar file, to be placed in the same folder.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM