Yau*_*aun 6 java parboiled java-21
我使用 parboiled 作为依赖项:
// https://mvnrepository.com/artifact/org.parboiled/parboiled-java
api 'org.parboiled:parboiled-java:1.4.1'
Run Code Online (Sandbox Code Playgroud)
从 java 17 更新到 21 后,我在尝试创建解析器时在运行时收到此错误:
java.lang.RuntimeException: Error creating extended parser class: Unsupported class file major version 65
at org.parboiled.Parboiled.createParser(Parboiled.java:58)
Run Code Online (Sandbox Code Playgroud)
版本 65 的类文件是 Java 21。解析器类现在确实使用目标 21 进行编译。为什么 parboiled 不能使用它?除了降级到目标 17 之外还有其他解决方法吗?
最小可重现示例:
构建.gradle
plugins {
id "application"
}
apply plugin : "java"
ext {
javaMainClass = "test.TestParser"
}
application {
mainClassName = javaMainClass
}
dependencies {
implementation 'org.parboiled:parboiled-java:1.4.1'
}
Run Code Online (Sandbox Code Playgroud)
测试解析器.java
package test;
import org.parboiled.BaseParser;
import org.parboiled.Parboiled;
import org.parboiled.Rule;
import org.parboiled.annotations.BuildParseTree;
@BuildParseTree
public class TestParser extends BaseParser<Object> {
public Rule InputLine() {
return Sequence(Digit(), EOI);
}
Rule Digit() {
return CharRange('0', '9');
}
public static void main(String[] args) {
TestParser parser = Parboiled.createParser(TestParser.class);
}
}
Run Code Online (Sandbox Code Playgroud)
gradle run
Configuration on demand is an incubating feature.
> Task :test2:compileJava
> Task :test2:processResources NO-SOURCE
> Task :test2:classes
> Task :test2:run FAILED
Exception in thread "main" java.lang.RuntimeException: Error creating extended parser class: Unsupported class file major version 65
at org.parboiled.Parboiled.createParser(Parboiled.java:58)
at test.TestParser.main(TestParser.java:34)
Caused by: java.lang.IllegalArgumentException: Unsupported class file major version 65
at org.objectweb.asm.ClassReader.<init>(ClassReader.java:199)
at org.objectweb.asm.ClassReader.<init>(ClassReader.java:180)
at org.objectweb.asm.ClassReader.<init>(ClassReader.java:166)
at org.objectweb.asm.ClassReader.<init>(ClassReader.java:287)
at org.parboiled.transform.AsmUtils.createClassReader(AsmUtils.java:59)
at org.parboiled.transform.ClassNodeInitializer.process(ClassNodeInitializer.java:62)
at org.parboiled.transform.ParserTransformer.extendParserClass(ParserTransformer.java:44)
at org.parboiled.transform.ParserTransformer.transformParser(ParserTransformer.java:39)
at org.parboiled.Parboiled.createParser(Parboiled.java:54)
... 1 more
Run Code Online (Sandbox Code Playgroud)
此故障发生在ASM库中,Parboiled 具有该库的依赖项。Parboiled 1.4.1 使用 ASM 9.2,但 ASM 9.5 中添加了 Java 21 支持。
添加以下内容将强制 gradle 将所有 ASM 依赖项解析为版本 9.5,从而解决该问题:
configurations.all {
resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'org.ow2.asm') {
details.useVersion "9.5"
}
}
}
dependencies {
implementation 'org.parboiled:parboiled-java:1.4.1'
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5862 次 |
| 最近记录: |