ktlint: ktlint fails on Java 16+

Exception in thread "main" java.util.concurrent.ExecutionException: java.lang.NoClassDefFoundError: Could not initialize class org.jetbrains.kotlin.com.intellij.pom.java.LanguageLevel
        at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122
        at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
        at com.pinterest.ktlint.KtlintCommandLine.parallel(Main.kt:575)
        at com.pinterest.ktlint.KtlintCommandLine.parallel$default(Main.kt:547)
        at com.pinterest.ktlint.KtlintCommandLine.lintFiles(Main.kt:298)
        at com.pinterest.ktlint.KtlintCommandLine.run(Main.kt:262)
        at com.pinterest.ktlint.Main.main(Main.kt:70)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.jetbrains.kotlin.com.intellij.pom.java.LanguageLevel
        at org.jetbrains.kotlin.com.intellij.core.CoreLanguageLevelProjectExtension.<init>(CoreLanguageLevelProjectExtension.java:26)
        at org.jetbrains.kotlin.com.intellij.core.JavaCoreProjectEnvironment.<init>(JavaCoreProjectEnvironment.java:42)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment.<init>(KotlinCoreProjectEnvironment.kt:26)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$ProjectEnvironment.<init>(KotlinCoreEnvironment.kt:121)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$Companion.createForProduction(KotlinCoreEnvironment.kt:425)
        at com.pinterest.ktlint.core.internal.KotlinPsiFileFactory.initializePsiFileFactory(KotlinPsiFileFactory.kt:74)
        at com.pinterest.ktlint.core.internal.KotlinPsiFileFactory.acquirePsiFileFactory$ktlint_core(KotlinPsiFileFactory.kt:39)
        at com.pinterest.ktlint.core.KtLint.format(KtLint.kt:378)
        at com.pinterest.ktlint.internal.FileUtilsKt.formatFile(FileUtils.kt:182)
        at com.pinterest.ktlint.KtlintCommandLine.process(Main.kt:366)
        at com.pinterest.ktlint.KtlintCommandLine.access$process(Main.kt:89)
        at com.pinterest.ktlint.KtlintCommandLine$lintFiles$3$1.call(Main.kt:289)
        at com.pinterest.ktlint.KtlintCommandLine$lintFiles$3$1.call(Main.kt:288)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
        at java.base/java.lang.Thread.run(Thread.java:831)

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Reactions: 23
  • Comments: 29 (2 by maintainers)

Commits related to this issue

Most upvoted comments

For those using the Gradle Kotlin DSL, I was able to invoke the formatter without issues with JDK 17 by doing the following:

tasks.register<JavaExec>("ktlintFormat") {
    group = "formatting"
    description = "Fix Kotlin code style deviations"
    classpath = ktlint
    mainClass.set("com.pinterest.ktlint.Main")
    args("-F", "src/**/*.kt")
    jvmArgs("--add-opens", "java.base/java.lang=ALL-UNNAMED")
}

The most important part here is adding:

jvmArgs("--add-opens", "java.base/java.lang=ALL-UNNAMED")

0.46.1 still not working

I think this bug is still not fixed. In case the linter has to fix some linting issues there is still an exception module java.base does not "opens java.lang" to unnamed module.

[INFO]    [ktlint] Exception in thread "main" java.util.concurrent.ExecutionException: java.lang.ExceptionInInitializerError
[INFO]    [ktlint]      at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
[INFO]    [ktlint]      at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
[INFO]    [ktlint]      at com.pinterest.ktlint.KtlintCommandLine.parallel(Main.kt:606)
[INFO]    [ktlint]      at com.pinterest.ktlint.KtlintCommandLine.parallel$default(Main.kt:578)
[INFO]    [ktlint]      at com.pinterest.ktlint.KtlintCommandLine.lintFiles(Main.kt:321)
[INFO]    [ktlint]      at com.pinterest.ktlint.KtlintCommandLine.run(Main.kt:282)
[INFO]    [ktlint]      at com.pinterest.ktlint.Main.main(Main.kt:76)
[INFO]    [ktlint] Caused by: java.lang.ExceptionInInitializerError
[INFO]    [ktlint]      at org.jetbrains.kotlin.com.intellij.util.exception.FrequentErrorLogger.report(FrequentErrorLogger.java:47)
[INFO]    [ktlint]      at org.jetbrains.kotlin.com.intellij.util.exception.FrequentErrorLogger.info(FrequentErrorLogger.java:43)
[INFO]    [ktlint]      at org.jetbrains.kotlin.com.intellij.psi.impl.DebugUtil.handleUnspecifiedTrace(DebugUtil.java:628)
[INFO]    [ktlint]      at org.jetbrains.kotlin.com.intellij.psi.impl.DebugUtil.currentInvalidationTrace(DebugUtil.java:620)
[INFO]    [ktlint]      at org.jetbrains.kotlin.com.intellij.psi.impl.DebugUtil.calcInvalidationTrace(DebugUtil.java:614)
[INFO]    [ktlint]      at org.jetbrains.kotlin.com.intellij.psi.impl.DebugUtil.onInvalidated(DebugUtil.java:585)
[INFO]    [ktlint]      at org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.TreeElement.onInvalidated(TreeElement.java:226)
[INFO]    [ktlint]      at org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.TreeElement.invalidate(TreeElement.java:328)
[INFO]    [ktlint]      at org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.TreeElement.rawRemove(TreeElement.java:312)
[INFO]    [ktlint]      at org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.TreeElement.rawReplaceWithList(TreeElement.java:319)
[INFO]    [ktlint]      at org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.LeafElement.rawReplaceWithText(LeafElement.java:146)
[INFO]    [ktlint]      at com.pinterest.ktlint.ruleset.standard.NoMultipleSpacesRule.visit(NoMultipleSpacesRule.kt:25)
[INFO]    [ktlint]      at com.pinterest.ktlint.core.KtLint$format$1.invoke(KtLint.kt:351)
[INFO]    [ktlint]      at com.pinterest.ktlint.core.KtLint$format$1.invoke(KtLint.kt:344)
[INFO]    [ktlint]      at com.pinterest.ktlint.core.VisitorProvider$sequentialVisitor$1$1$1$1.invoke(VisitorProvider.kt:102)
[INFO]    [ktlint]      at com.pinterest.ktlint.core.VisitorProvider$sequentialVisitor$1$1$1$1.invoke(VisitorProvider.kt:102)
[INFO]    [ktlint]      at com.pinterest.ktlint.core.ast.PackageKt.visit(package.kt:229)
[INFO]    [ktlint]      at com.pinterest.ktlint.core.ast.PackageKt.visit(package.kt:230)
[INFO]    [ktlint]      at com.pinterest.ktlint.core.ast.PackageKt.visit(package.kt:230)
[INFO]    [ktlint]      at com.pinterest.ktlint.core.ast.PackageKt.visit(package.kt:230)
[INFO]    [ktlint]      at com.pinterest.ktlint.core.ast.PackageKt.visit(package.kt:230)
[INFO]    [ktlint]      at com.pinterest.ktlint.core.VisitorProvider$sequentialVisitor$1.invoke(VisitorProvider.kt:102)
[INFO]    [ktlint]      at com.pinterest.ktlint.core.VisitorProvider$sequentialVisitor$1.invoke(VisitorProvider.kt:94)
[INFO]    [ktlint]      at com.pinterest.ktlint.core.KtLint.format(KtLint.kt:344)
[INFO]    [ktlint]      at com.pinterest.ktlint.internal.FileUtilsKt.formatFile(FileUtils.kt:221)
[INFO]    [ktlint]      at com.pinterest.ktlint.KtlintCommandLine.process(Main.kt:396)
[INFO]    [ktlint]      at com.pinterest.ktlint.KtlintCommandLine.access$process(Main.kt:95)
[INFO]    [ktlint]      at com.pinterest.ktlint.KtlintCommandLine$lintFiles$3.invoke$lambda-1(Main.kt:311)
[INFO]    [ktlint]      at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[INFO]    [ktlint]      at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
[INFO]    [ktlint]      at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
[INFO]    [ktlint]      at java.base/java.lang.Thread.run(Thread.java:833)
[INFO]    [ktlint] Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private transient java.lang.Object java.lang.Throwable.backtrace accessible: module java.base does not "opens java.lang" to unnamed module @43517800
[INFO]    [ktlint]      at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
[INFO]    [ktlint]      at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
[INFO]    [ktlint]      at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:178)
[INFO]    [ktlint]      at java.base/java.lang.reflect.Field.setAccessible(Field.java:172)
[INFO]    [ktlint]      at org.jetbrains.kotlin.com.intellij.util.ReflectionUtil.findFieldInHierarchy(ReflectionUtil.java:154)
[INFO]    [ktlint]      at org.jetbrains.kotlin.com.intellij.util.ReflectionUtil.getDeclaredField(ReflectionUtil.java:279)
[INFO]    [ktlint]      at org.jetbrains.kotlin.com.intellij.openapi.util.objectTree.ThrowableInterner.<clinit>(ThrowableInterner.java:88)
[INFO]    [ktlint]      ... 32 more

Any news about this?

For maven projects using the maven-antrun-plugin you can add this to your pom:

<java taskname="ktlint" dir="${basedir}" fork="true" failonerror="true" classname="com.pinterest.ktlint.Main" classpathref="maven.plugin.classpath">
      <jvmarg value="--add-opens"/>
      <jvmarg value="java.base/java.lang=ALL-UNNAMED"/>

It worked for me by adding the following line to .mvn/jvm.config --add-opens java.base/java.lang=ALL-UNNAMED

I am using ktlint with Gradle wrapper (without a plugin) with Gradle 7.1.1 I upgraded to Kotlin 1.5.21 and ktlint 0.42.1 now, but get this error now instead:

when running ./gradlew ktlintFormat:

Exception in thread "main" java.util.concurrent.ExecutionException: java.lang.ExceptionInInitializerError
        at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
        at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
        at com.pinterest.ktlint.KtlintCommandLine.parallel(Main.kt:575)
        at com.pinterest.ktlint.KtlintCommandLine.parallel$default(Main.kt:547)
        at com.pinterest.ktlint.KtlintCommandLine.lintFiles(Main.kt:298)
        at com.pinterest.ktlint.KtlintCommandLine.run(Main.kt:262)
        at com.pinterest.ktlint.Main.main(Main.kt:70)
Caused by: java.lang.ExceptionInInitializerError
        at org.jetbrains.kotlin.com.intellij.util.exception.FrequentErrorLogger.report(FrequentErrorLogger.java:46)
        at org.jetbrains.kotlin.com.intellij.util.exception.FrequentErrorLogger.info(FrequentErrorLogger.java:42)
        at org.jetbrains.kotlin.com.intellij.psi.impl.DebugUtil.handleUnspecifiedTrace(DebugUtil.java:626)
        at org.jetbrains.kotlin.com.intellij.psi.impl.DebugUtil.currentInvalidationTrace(DebugUtil.java:618)
        at org.jetbrains.kotlin.com.intellij.psi.impl.DebugUtil.calcInvalidationTrace(DebugUtil.java:612)
        at org.jetbrains.kotlin.com.intellij.psi.impl.DebugUtil.onInvalidated(DebugUtil.java:583)
        at org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.TreeElement.onInvalidated(TreeElement.java:226)
        at org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.TreeElement.invalidate(TreeElement.java:328)
        at org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.TreeElement.rawRemove(TreeElement.java:312)
        at org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.TreeElement.rawReplaceWithList(TreeElement.java:319)
        at org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.LeafElement.rawReplaceWithText(LeafElement.java:146)
        at com.pinterest.ktlint.ruleset.standard.IndentationRule.visitWhiteSpace(IndentationRule.kt:1083)
        at com.pinterest.ktlint.ruleset.standard.IndentationRule.access$visitWhiteSpace(IndentationRule.kt:103)
        at com.pinterest.ktlint.ruleset.standard.IndentationRule$indent$2.invoke(IndentationRule.kt:600)
        at com.pinterest.ktlint.ruleset.standard.IndentationRule$indent$2.invoke(IndentationRule.kt:463)
        at com.pinterest.ktlint.core.ast.PackageKt.visit(package.kt:230)
        at com.pinterest.ktlint.core.ast.PackageKt.visit(package.kt:231)
        at com.pinterest.ktlint.core.ast.PackageKt.visit(package.kt:231)
        at com.pinterest.ktlint.core.ast.PackageKt.visit(package.kt:231)
        at com.pinterest.ktlint.core.ast.PackageKt.visit(package.kt:231)
        at com.pinterest.ktlint.core.ast.PackageKt.visit(package.kt:231)
        at com.pinterest.ktlint.core.ast.PackageKt.visit(package.kt:231)
        at com.pinterest.ktlint.core.ast.PackageKt.visit(package.kt:231)
        at com.pinterest.ktlint.ruleset.standard.IndentationRule.indent(IndentationRule.kt:462)
        at com.pinterest.ktlint.ruleset.standard.IndentationRule.visit(IndentationRule.kt:162)
        at com.pinterest.ktlint.core.KtLint$format$1.invoke(KtLint.kt:391)
        at com.pinterest.ktlint.core.KtLint$format$1.invoke(KtLint.kt:384)
        at com.pinterest.ktlint.core.KtLint$visitor$2.invoke(KtLint.kt:320)
        at com.pinterest.ktlint.core.KtLint$visitor$2.invoke(KtLint.kt:302)
        at com.pinterest.ktlint.core.KtLint.format(KtLint.kt:384)
        at com.pinterest.ktlint.internal.FileUtilsKt.formatFile(FileUtils.kt:199)
        at com.pinterest.ktlint.KtlintCommandLine.process(Main.kt:366)
        at com.pinterest.ktlint.KtlintCommandLine.access$process(Main.kt:89)
        at com.pinterest.ktlint.KtlintCommandLine$lintFiles$3.invoke$lambda-0(Main.kt:289)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
        at java.base/java.lang.Thread.run(Thread.java:831)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private transient java.lang.Object java.lang.Throwable.backtrace accessible: module java.base does not "opens java.lang" to unnamed module @7c29daf3
        at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357)
        at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
        at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:177)
        at java.base/java.lang.reflect.Field.setAccessible(Field.java:171)
        at org.jetbrains.kotlin.com.intellij.util.ReflectionUtil.findFieldInHierarchy(ReflectionUtil.java:153)
        at org.jetbrains.kotlin.com.intellij.util.ReflectionUtil.getDeclaredField(ReflectionUtil.java:278)
        at org.jetbrains.kotlin.com.intellij.openapi.util.objectTree.ThrowableInterner.<clinit>(ThrowableInterner.java:81)
        ... 38 more

Java 17-temurin ktlint still not working with following command

mvn ktlint:format -DjvmArgs=“–add-opens java.base/java.lang=ALL-UNNAMED” -DjvmArgs=" --add-exports java.base/sun.nio.ch=ALL-UNNAMED"

Error: Unable to make field private transient java.lang.Object java.lang.Throwable.backtrace accessible: module java.base does not “opens java.lang” to unnamed module

I am using ktlint with Gradle wrapper (without a plugin) with Gradle 7.1.1 I upgraded to Kotlin 1.5.21 and ktlint 0.42.1 now, but get this error now instead:

Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private transient java.lang.Object java.lang.Throwable.backtrace accessible: module java.base does not “opens java.lang” to unnamed module @7c29daf3

I have the same version combination and the same failure happens.

You could try to run KtLint with --add-opens "java.base/java.util=ALL-UNNAMED" --add-exports="java.base/sun.nio.ch=ALL-UNNAMED" arguments.