2013-06-02 26 views
3
<dependencies> 
    <dependency org="org.apache.commons" name="commons-math3" rev="3.2"/> 
    <dependency org="org.antlr" name="antlr4" rev="4.0"/> 
    <dependency org="org.antlr" name="antlr4-runtime" rev="4.0"/> 
    <dependency org="org.antlr" name="antlr4-master" rev="4.0"/> 
</dependencies> 

我使用Ivy使用ant腳本來下載lib目錄中的依賴關係JAR。 antlr4-4.0.jar是這些依賴項之一。但是,當我這樣做終端:無法運行java -cp antlr4-4.0.jar org.anlr.v4.Tool

java -cp antlr4-4.0.jar org.antlr.v4.Tool 

我得到這個異常:

Exception in thread "main" java.lang.NoClassDefFoundError: org/antlr/v4/runtime  /misc/ParseCancellationException 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:787) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:447) 
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2451) 
    at java.lang.Class.getMethod0(Class.java:2694) 
    at java.lang.Class.getMethod(Class.java:1622) 
    at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486) 
Caused by: java.lang.ClassNotFoundException: org.antlr.v4.runtime.misc.ParseCancellationException 
    ... 25 more 

我在做什麼錯?

+1

也許你需要其他的依賴添加到類路徑,用「;」分隔在Windows或「: 「在Linux/UNIX上。 – earcam

回答

2

感謝earcam我解決了這個問題 我通過添加分隔的所有依賴到classpath做到了:

java -cp lib/antlr4-4.0.jar:lib/antlr4-runtime-4.0.jar:lib/stringtemplate-3.2.1.jar:lib/ST4-4.0.7.jar:lib/antlr-runtime-3.5.jar org.antlr.v4.Tool 
0

另一種選擇是使用常春藤作爲standalone jar推出antl4r:

$ java -jar ivy-2.3.0.jar -dependency org.antlr antlr4 4.0 -confs default -warn -main org.antlr.v4.Tool 
ANTLR Parser Generator Version 4.0 
-o ___    specify output directory where all output is generated 
-lib ___   specify location of grammars, tokens files 
-atn    generate rule augmented transition network diagrams 
-encoding ___  specify grammar file encoding; e.g., euc-jp 
-message-format ___ specify output style for messages in antlr, gnu, vs2005 
-long-messages  show exception details when available for errors and warnings 
-listener   generate parse tree listener (default) 
-no-listener  don't generate parse tree listener 
-visitor   generate parse tree visitor 
-no-visitor   don't generate parse tree visitor (default) 
-package ___  specify a package/namespace for the generated code 
-depend    generate file dependencies 
-D<option>=value set/override a grammar-level option 
-Werror    treat warnings as errors 
-XdbgST    launch StringTemplate visualizer on generated code 
-XdbgSTWait   wait for STViz to close before continuing 
-Xforce-atn   use the ATN simulator for all predictions 
-Xlog    dump lots of logging info to antlr-timestamp.log 

創建一個別名,你有一個自動啓動antlr4的機制:

alias antlr4='java -jar ivy-2.3.0.jar -dependency org.antlr antlr4 4.0 -confs default -warn -main org.antlr.v4.Tool -args' 

唯一的缺點這種方式傳遞選項不能很好地工作:-(

antlr4 Hello.g4 -o test