Freshmark doesn't work on JDK 15 due to missing Nashorn
Nashorn was removed in JDK 15, and freshmark depends on it so crashes.
Caused by: java.lang.RuntimeException: Error on line 21: Cannot invoke "javax.script.ScriptEngine.getContext()" because "jsEngine" is null
at com.diffplug.freshmark.Parser$1ErrorFormatter.lambda$wrap$2(Parser.java:89)
at com.diffplug.freshmark.ParserIntronExon.bodyAndTags(ParserIntronExon.java:71)
at com.diffplug.freshmark.Parser.compile(Parser.java:162)
at com.diffplug.freshmark.CommentScript.compile(CommentScript.java:85)
... 141 more
Caused by: java.lang.NullPointerException: Cannot invoke "javax.script.ScriptEngine.getContext()" because "jsEngine" is null
at com.diffplug.jscriptbox.javascript.Nashorn.lambda$language$0(Nashorn.java:43)
at com.diffplug.jscriptbox.JScriptBox.build(JScriptBox.java:89)
at com.diffplug.freshmark.FreshMark.setupScriptEngine(FreshMark.java:65)
at com.diffplug.freshmark.CommentScript.lambda$compileSection$0(CommentScript.java:71)
at com.diffplug.common.base.Errors$Rethrowing.lambda$wrap$11(Errors.java:342)
at com.diffplug.common.base.Errors$Rethrowing.get(Errors.java:334)
at com.diffplug.freshmark.CommentScript.compileSection(CommentScript.java:70)
at com.diffplug.freshmark.Parser$1State.tag(Parser.java:144)
at com.diffplug.freshmark.Parser$1ErrorFormatter.lambda$wrap$2(Parser.java:78)
... 144 more
Gradle version: 6.8.2 JDK version: AdoptOpenJDK jdk-15.0.1.9-hotspot OS version: Windows 10 20H2 Freshmark config:
spotless.freshmark(it -> {
it.properties(props -> props.putAll(settings.toProperties(project)));
it.target(files(project, "**/*.md"));
it.indentWithTabs();
it.endWithNewline();
});
This can be worked around by adding nashorn-core to the buildscript classpath:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.openjdk.nashorn:nashorn-core:15.2")
}
}
Thanks! We should build this into Spotless transparently. We can do it like this:
- Move
JreVersionfromtestlibintolib, keep theassume()methods in testlib in a new classJreVersionAssume - Refactor
GoogleJavaFormatStepto use that too - Depending on
JreVersion, add thenashorn-coredep into theJarStatebelow
https://github.com/diffplug/spotless/blob/9dd69f7ff7feb6b2b7d26285a5b5ea6896a935ad/lib/src/main/java/com/diffplug/spotless/markdown/FreshMarkStep.java#L57
I'm still on Java 8 personally, so this isn't going to make the top of my TODO anytime soon. Happy to take a PR! We're already doing CI on JRE 15, so the testing part should be pretty straightforward.
Fixed in plugin-gradle 6.14.1 thanks to @beegee1.