記一次antlr錯誤:ANTLR Tool version 4.5.3 used for code generation does not match the current runtime v...

 

 

場景:重構spark 2.1版本的sql語法。所以 須要使用antlr;java

前期準備:idea安裝了antlr插件(antlr的4.7.2版本)sql

 

 

 

所以在maven工程中添加了antlr的依賴:maven

<dependency>
            <groupId>org.antlr</groupId>
            <artifactId>antlr4-runtime</artifactId>
            <version>4.7.2</version>
        </dependency>

同事在mac的環境下也配置了antlr4.7.2的環境變量ide

#export CLASSPATH=".:/usr/local/lib/antlr-4.7-complete.jar:$CLASSPATH" #export CLASSPATH=".;%JAVA_HOME%\jre\lib\rt.jar;/usr/local/lib/antlr-4.7-complete.jar:$CLASSPATH" #alias antlr4='java -jar /usr/local/lib/antlr-4.7-complete.jar' #alias grun='java org.antlr.v4.gui.TestRig'

一切工做準備就緒,使用idea運行重構好的spark sql,在編譯期出現以下錯誤:ui

ANTLR Tool version 4.5.3 used for code generation does not match the current runtime version 4.7.2ANTLR:idea

錯誤的認爲是:spa

<dependency>
            <groupId>org.antlr</groupId>
            <artifactId>antlr4-runtime</artifactId>
</dependency>

點擊進入依賴,看當前antlr4的底層的依賴:插件

<plugin>
                <groupId>org.antlr</groupId>
                <artifactId>antlr4-maven-plugin</artifactId>
                <version>4.5.3</version> <!-- use older version to process XPathLexer.g4, avoiding cyclic build dependency -->
                <executions>
                    <execution>
                        <id>antlr</id>
                        <configuration>
                            <sourceDirectory>src</sourceDirectory>
                        </configuration>
                        <goals>
                            <goal>antlr4</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

這樣就能對上錯誤問題了,由於使用4.7.2生成的代碼。可是在編譯期間是4.5.3;因此出錯了3d

錯誤的解決:code

將4.5.3改爲4.7便可

##############################真實的緣由######################################################

spark 2.1版本,支持的antlr是4.5.3.能夠下載spark源碼,查看maven依賴

 

由以上能夠推斷出錯誤的緣由大體是由於spark 2.1版本目前還不支持antlr4.7.2

 

解決:

修改antlr環境變量,改爲antlr4.5.3版本

export CLASSPATH=".:/usr/local/lib/antlr-4.5.3-complete.jar:$CLASSPATH" alias antlr4='java -Xmx500M -cp "/usr/local/lib/antlr-4.5.3-complete.jar:$CLASSPATH" org.antlr.v4.Tool' alias grun='java org.antlr.v4.runtime.misc.TestRig'

而後卸載掉idea的antlr插件;

(https://www.cnblogs.com/niutao/)

這樣從新基於antlr生成代碼後,就能夠正常運行了

相關文章
相關標籤/搜索