首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NoSuchMethodError: org.objectweb.asm.tree.ClassNode.<init>(I)V

NoSuchMethodError: org.objectweb.asm.tree.ClassNode.<init>(I)V
EN

Stack Overflow用户
提问于 2015-01-24 13:58:33
回答 1查看 1.7K关注 0票数 1

我有以下程序,它执行一个解析器。这是在格拉巴(一叉子煮)中发展出来的。

代码语言:javascript
复制
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());
        }
} 

TestGrammar

代码语言:javascript
复制
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);
    }
}

但是,当我试图执行上面的程序时,我会得到以下错误。

代码语言:javascript
复制
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)

我有以下maven依赖项

  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

代码语言:javascript
复制
<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服务第2版

一些不起作用的尝试,

我注意到了asm-debug-all-5.0.3.jar的下面这个图标,我不知道这个图标在eclipse中意味着什么。

  1. 另外,在pom.xml of dependency jitesscript-0.4.0.jar中,我注意到了org.objectweb.asm包的重新定位。然而,同样包含ClassNode(int) jitescript的类是在16-2014年4月-2014年上更新的,而asm-debug-all-5.0.3是在24-5-2014上更新的。
  2. 我已经尝试删除jitescript.jar,更新了maven项目,也清理和构建了它,但仍然没有用。
  3. 我还在开普勒中测试了这一点,而不使用maven,手动包含了上面列出的所有依赖项。不过,我还是会犯同样的错误。这意味着问题不在于Maven,而在于其他问题。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-29 14:08:33

此错误是由于dcevm.jar存在于我的jre\lib\ext文件夹中。我为项目使用的jdk包含dcevm.jar文件,这个jar包含containsClassNodewith no constructor like ClassNode(int)的包org.objectweb.asm.tree

jvm使用的是这个jar,而不是maven依赖项中的jar文件,也就是说,如果项目使用的JRE系统库中的任何jar文件中都有类,它们将覆盖maven jar中的类。

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

摘要

由于包含该类的jar文件的不同版本,此类错误的发生非常明显。为查明这些问题:

  1. 首先,搜索类(前)。ClassNode)在eclipse (Ctrl+Shift+T)中,您会发现具有相同类名和包的不同文件。你也可以看到他们的位置。
  2. 打开每个方法并检查方法未找到的地方。消除它。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28126238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档