URLClassLoader and Multi-release jar

153 Views Asked by At

I use the URLClassLoader to dynamically load JDBC drivers into my application. My application is compiled under OpenJDK15. I cannot upgrade since some drivers would get issues under higher versions.

One of the drivers is using truffle-api-22.2.0.jar, which has support for two Java versions:

truffle-api-22.2.0.jar\META-INF\versions\11 and 17

When the jar is loaded, I get this exception:

java.lang.UnsupportedClassVersionError: META-INF/versions/17/module-info has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 59.0
java.lang.UnsupportedClassVersionError: META-INF/versions/17/module-info has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 59.0
  at java.base/java.lang.ClassLoader.defineClass1(Native Method)
  at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
  at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
  at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:825)
  at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:723)
  at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:646)
  at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:604)
  at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
  at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:576)
  at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
  at com.wisecoders.dbs.dbms.driver.model.a.a(DriverClassLoader.java:132)
  at com.wisecoders.dbs.dbms.driver.model.a.b(DriverClassLoader.java:110)
  at com.wisecoders.dbs.dbms.driver.model.a.a(DriverClassLoader.java:88)
  at com.wisecoders.dbs.dbms.driver.model.a.a(DriverClassLoader.java:66)
  at com.wisecoders.dbs.dbms.driver.model.a.<init>(DriverClassLoader.java:34)

I used:

urlClassLoader = new URLClassLoader( urlsArray, OneClassFromMyCode.class.getClassLoader() );
urlClassLoader.loadClass( className );

The URLClassLoader documentation states that this should work with multi-version jars. Which could be the issue?

0

There are 0 best solutions below