Skip to content

Java 25 compatibility -- including workaround for downstream projectsΒ #1083

@TarqusMiltonium

Description

@TarqusMiltonium

The current version (v3.2.1263) is not compatible with Java 25 runtime. This is due to an outdated GraalVM/js dependency, which in-turn calls a deprecated JDK-internal method (sun.misc.Unsafe.ensureClassInitialized()), which has now been removed from the OpenJDK Java 25 JRE implementation. (This method was long marked as "deprecated for removal"... and has now been removed).

For downstream projects using typescript-generator with Maven, this Issue can be worked around in your pom.xml file:

            <plugin>
                <groupId>cz.habarta.typescript-generator</groupId>
                <artifactId>typescript-generator-maven-plugin</artifactId>
                <version>${typescript-generator-maven-plugin.version}</version>
                <!-- ... <configuration> etc ....  -->
                <dependencies>
                    <dependency>
                        <groupId>cz.habarta.typescript-generator</groupId>
                        <artifactId>typescript-generator-spring</artifactId>
                        <version>${typescript-generator-maven-plugin.version}</version>
                    </dependency>
                    <dependency>   <!-- Add this dependency here: -->
                        <groupId>org.graalvm.js</groupId>
                        <artifactId>js</artifactId>
                        <version>25.0.0</version>
                        <type>pom</type>
                    </dependency>
                </dependencies>
            </plugin>

This will pull in the updated graalvm dependency at runtime, and the typescript plugin should then work again (it does on my project, at least). I assume there is a Gradle equivalent of the above stanza; feel free to post it as a comment below.

For reference, the full stacktrace of the failing plugin is below:

Caused by: java.lang.NoSuchMethodError: 'void sun.misc.Unsafe.ensureClassInitialized(java.lang.Class)'
    at com.oracle.truffle.api.library.LibraryFactory.ensureLibraryInitialized (LibraryFactory.java:384)
    at com.oracle.truffle.api.library.LibraryFactory.getUncached (LibraryFactory.java:364)
    at com.oracle.truffle.api.library.LibraryFactory.<init> (LibraryFactory.java:210)
    at com.oracle.truffle.api.interop.InteropLibraryGen.<init> (InteropLibraryGen.java:175)
    at com.oracle.truffle.api.interop.InteropLibraryGen.<clinit> (InteropLibraryGen.java:166)
    at java.lang.Class.forName0 (Native Method)
    at java.lang.Class.forName (Class.java:547)
    at com.oracle.truffle.api.library.LibraryFactory.loadGeneratedClass (LibraryFactory.java:791)
    at com.oracle.truffle.api.library.LibraryFactory.resolveImpl (LibraryFactory.java:740)
    at com.oracle.truffle.api.library.LibraryFactory.resolve (LibraryFactory.java:733)
    at com.oracle.truffle.api.interop.InteropLibrary.<clinit> (InteropLibrary.java:2873)
    at com.oracle.truffle.polyglot.PolyglotValueDispatch.<clinit> (PolyglotValueDispatch.java:156)
    at com.oracle.truffle.polyglot.PolyglotImpl.initialize (PolyglotImpl.java:166)
    at org.graalvm.polyglot.impl.AbstractPolyglotImpl.setConstructors (AbstractPolyglotImpl.java:271)
    at org.graalvm.polyglot.Engine$1.loadAndValidateProviders (Engine.java:940)
    at org.graalvm.polyglot.Engine$1.run (Engine.java:900)
    at org.graalvm.polyglot.Engine$1.run (Engine.java:894)
    at java.security.AccessController.doPrivileged (AccessController.java:74)
    at org.graalvm.polyglot.Engine.initEngineImpl (Engine.java:894)
    at org.graalvm.polyglot.Engine$ImplHolder.<clinit> (Engine.java:139)
    at org.graalvm.polyglot.Engine.getImpl (Engine.java:363)
    at org.graalvm.polyglot.Engine$Builder.build (Engine.java:621)
    at cz.habarta.typescript.generator.compiler.SymbolTable.getCustomTypeNamingFunction (SymbolTable.java:211)
    at cz.habarta.typescript.generator.compiler.SymbolTable.getMappedNamespacedName (SymbolTable.java:148)
    at cz.habarta.typescript.generator.compiler.SymbolTable.setSymbolQualifiedName (SymbolTable.java:128)
    at cz.habarta.typescript.generator.compiler.SymbolTable.resolveSymbolNames (SymbolTable.java:93)
    at cz.habarta.typescript.generator.compiler.ModelCompiler.javaToTypeScript (ModelCompiler.java:191)
    at cz.habarta.typescript.generator.TypeScriptGenerator.generateTypeScript (TypeScriptGenerator.java:74)
    at cz.habarta.typescript.generator.maven.GenerateMojo.execute (GenerateMojo.java:991)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
    at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:104)
    at java.lang.reflect.Method.invoke (Method.java:565)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:255)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:201)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:361)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:314)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions