gpt4 book ai didi

java - 使用 Parboiled 时出现 NoSuchMethodError : org. objectweb.asm.tree.ClassNode.(I)V

转载 作者:行者123 更新时间:2023-11-30 03:35:17 24 4
gpt4 key购买 nike

我有以下程序,它执行解析器。这是用格拉巴酒(一种半熟的 fork )开发的

package com.test;

import org.parboiled.Parboiled;
import org.parboiled.parserunners.BasicParseRunner;
import org.parboiled.parserunners.ParseRunner;
import org.parboiled.support.ParsingResult;

public final class SampleRun
{
public static void main(final String... args)
{
// 1. create a parser

final TestGrammar parser = Parboiled.createParser(TestGrammar.class);
// 2. create a runner
final ParseRunner<String> runner
= new BasicParseRunner<String>(parser.oneLine());
// 3. collect the result

@SuppressWarnings("deprecation")
final ParsingResult<String> result
= runner.run("sno101 snamegowtham");

// 4. success or not?
System.out.println(result.isSuccess());
}
}

测试语法

package com.test;

import com.github.parboiled1.grappa.parsers.EventBusParser;
import org.parboiled.Rule;
import org.parboiled.support.Var;

import java.util.HashMap;
import java.util.Map;

public class TestGrammar
extends EventBusParser<String>
{
protected final Map<String, String> collectedValues
= new HashMap<String, String>();
protected final Var<String> var = new Var<String>();

Rule key()
{
return sequence(
firstOf(ignoreCase("sno"), ignoreCase("sname")),
var.set(match().toLowerCase()),
!collectedValues.containsKey(var.get())
);
}

Rule separator()
{
return optional(anyOf(":-*_ "));
}

Rule value()
{
return sequence(
oneOrMore(testNot(wsp()), ANY),
collectedValues.put(var.get(), match()) == null
);
}

Rule oneLine()
{
return join(sequence(key(), separator(), value()))
.using(oneOrMore(wsp()))
.min(2);
}
}

但是,当我尝试执行上述程序时,出现以下错误。

Exception in thread "main" java.lang.NoSuchMethodError: org.objectweb.asm.tree.ClassNode.<init>(I)V
at org.parboiled.transform.ParserClassNode.<init>(ParserClassNode.java:50)
at org.parboiled.transform.ParserTransformer.extendParserClass(ParserTransformer.java:93)
at org.parboiled.transform.ParserTransformer.transformParser(ParserTransformer.java:63)
at org.parboiled.Parboiled.createParser(Parboiled.java:64)
at com.test.SampleRun.main(SampleRun.java:15)

我有以下ma​​ven 依赖项

  1. grappa-1.0.4.jar
  2. asm-debug-all-5.0.3.jar
  3. guava-18.0.jar
  4. jitescript-0.4.0.jar

这是我的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>parboiledprogram</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.github.parboiled1</groupId>
<artifactId>grappa</artifactId>
<version>1.0.4</version>
</dependency>
</dependencies>
</project>

注意:我正在使用Eclipse Juno Service Release 2

<小时/>

一些尝试没有成功

<小时/>

我注意到asm-debug-all-5.0.3.jar有以下图标,我不确定这个图标在eclipse juno中意味着什么。

enter image description here

  1. 此外,在 pom.xml依赖 jitesscript-0.4.0.jar 我注意到 org.objectweb.asm 包的重新定位。但是,其中的类也包含 ClassNode(int) jitescript 更新于 2014 年 4 月 16 日,而 asm- debug-all-5.0.3 发布于2014 年 5 月 24 日

  2. 我尝试删除 jitescript.jar 并更新 Maven 项目,并清理和构建它,但仍然没有用。

  3. 我还在 KEPLER 中测试了这一点,无需使用 Maven,手动包含上面列出的所有依赖项。但我仍然遇到同样的错误。这意味着问题不在于 Maven,而在于其他问题。

最佳答案

该错误是由于我的 jre\lib\ext 文件夹中存在 dcevm.jar 造成的。我用于该项目的jdk包含dcevm.jar文件,并且该jar包含包org.objectweb.asm.tree,其中包含ClassNode没有像 ClassNode(int) 这样的构造函数

jvm 使用此 jar 而不是 maven 依赖项中的 jar 文件,即,如果项目使用的 JRE 系统库中的任何 jar 文件中存在类,它们将覆盖 maven 中存在的类 jar 。

因此,我从jre\lib\ext中删除了dcevm.jar,然后在我的eclipse首选项中,我将执行环境更改为新的(到我的 jdk 路径,jdk1.7.0_13)并使用 at 是默认值。

摘要

此类错误的发生显然是因为包含该类的 jar 文件版本不同。要识别它们:

  1. 首先,在 eclipse 中搜索类(例如 ClassNode)打开类型(Ctrl+Shift+T),您会发现具有相同类名的不同文件还有包装。您还可以查看它们的位置。
  2. 打开每一个并检查其中没有找到该方法。消除它。

注意:如果该类存在于 JRE 系统库中,那么这可能会覆盖 Maven 依赖项中的类。

关于java - 使用 Parboiled 时出现 NoSuchMethodError : org. objectweb.asm.tree.ClassNode.<init>(I)V,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28126238/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com