datalevin

Aleks 2024-10-01T06:56:08.199179Z

One more question, when I run the latest uberjar I get an exception

$ java -jar datalevin-0.9.10-standalone.jar
Exception in thread "main" java.lang.UnsupportedClassVersionError: datalevin/utl/LRUCache 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 55.0
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1022)
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:527)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:398)
        at clojure.lang.RT.classForName(RT.java:2209)
        ...
Is it expected behaviour? JVM on my server is 11
$ java -version
openjdk version "11.0.24" 2024-07-16
OpenJDK Runtime Environment (build 11.0.24+8-post-Ubuntu-1ubuntu322.04)
OpenJDK 64-Bit Server VM (build 11.0.24+8-post-Ubuntu-1ubuntu322.04, mixed mode, sharing)

2024-10-02T12:53:27.276629Z

I’ve also had to pass them in when building/compiling the uberjar

(defn uber
  [_]
  (clean nil)
  (b/copy-dir {:src-dirs ["src" "resources"] :target-dir class-dir})
  (b/compile-clj {:basis     basis
                  :src-dirs  ["src"]
                  :class-dir class-dir
                  :java-opts
                  ["--add-opens=java.base/java.nio=ALL-UNNAMED"
                   "--add-opens=java.base/sun.nio.ch=ALL-UNNAMED"]})
  (b/uber {:class-dir class-dir
           :uber-file uber-file
           :basis     basis
           :main      'app.main}))
On java 21.

2024-10-01T08:52:24.305719Z

You might need to pass some flags, I know you do for jars that embed datalevin

java -jar datalevin-0.9.10-standalone.jar -add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED

Huahai 2024-10-01T16:19:16.513799Z

In addition to the flags above, java 17 is required for this uberjar. Guess we didn't specify the Java target

Huahai 2024-10-01T16:21:59.638359Z

Will do in the next version.

Huahai 2024-10-01T16:22:35.627309Z

since we still support java 8, I will set Javac target to "1.8"

Aleks 2024-10-01T18:54:07.792089Z

thanks