У меня есть следующая программа, которая выполняет парсер. Составляется в граппы (форк пропаренного)NoSuchMethodError: org.objectweb.asm.tree.ClassNode. <init> (I) V при использовании Parboiled
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
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)
У меня есть следующие зависимости Maven
- граппа-1.0.4.jar
- ASM-отладки всех 5.0.3.jar
- гуава-18.0.jar
- 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.
Кроме того, в pom.xml в зависимости
jitesscript-0.4.0.jar
я заметил переселениеorg.objectweb.asm
пакета. Однако классы, которые тоже содержатClassNode(int)
jitescript
был обновлен на 16-апр-2014 тогдаasm-debug-all-5.0.3
был на 24-май-2014Я попытался удалить jitescript.jar и обновил Maven проект, а также очистить и построить его, но по-прежнему бесполезно.
Я также проверил это в KEPLER без использования maven вручную, включая все зависимости, перечисленные выше. Но все же, я получаю ту же ошибку. Это означает, что проблема была не с Maven, а с чем-то еще.
Что любопытно здесь, что если у вас ДЕЙСТВИТЕЛЬНО есть asm jar, существует конструктор ClassNode (int) ... Все, что делает ParserClassNode, это вызов 'super (Opcodes.ASM5)'; Я не вижу причин, почему это не удается :( – fge
Я протестировал с помощью простого «AbcParser», и он сработал. Можете ли вы опубликовать «TestGrammar»? –
@JavaTechnical Я создал проект, подобный вашему, и он работал. См. Здесь: http: // goo .gl/WDZh1I. Попробуйте обновить свой проект, полностью очистите и перестройте, я не вижу причин, почему это не удается. –