티스토리 뷰
* 개요
java.lang.NoClassDefFoundError: org/antlr/v4/runtime/TokenSource
...
또는
java.lang.NoClassDefFoundError: org/antlr/v4/runtime/CharStream
* 참고
버전 3.2 에서 비슷한 현상
https://bugzilla.redhat.com/show_bug.cgi?id=1286387
딱히 관련은 없었음
* 환경
eclipse
maven
hibernate 3.6.4
Spring MVC
* 원인
- hibernate 3.6.4 에서 antlr 2.7.1 을 쓰고 있었음.
(pom.xml => dependency hiearachy 에서 확인 )
- 위 antlr 과 별도로 antlr 4.7.1 jar 파일 직접 build path 추가 한 상태 (maven 사용 안 함).
- 아마 두개 버전이 충돌한 것으로 보임
* 해결 - 실패함
- 1. pom.xml 에서 hibernate 3.6.4 에서 antlr 을 exclude 시킴
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.6.4.Final</version>
<exclusions>
<!-- ... 생략 ... -->
<!-- antlr 4 와 충돌하는듯하여 일단 지움 -->
<exclusion>
<groupId>antlr</groupId>
<artifactId>antlr</artifactId>
</exclusion>
</exclusions>
</dependency>
- 2. java build path 에 ANTLR 4.7 jar 직접 포함 시켰던것을 maven 으로 대체함.
<!-- antlr 별도 추가시켜줌 -->
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr4-runtime</artifactId>
<version>4.7.1</version>
</dependency>
- 위 방법으로 했을때 잠깐은 잘 돌았지만
하이버네이트 Query q= s.createQuery("FROM XXX " );
사용시 다음 오류 발생함
(문제2)
at org.hibernate.hql.ast.ASTQueryTranslatorFactory.createQueryTranslator(ASTQueryTranslatorFactory.java:58)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:98)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:124)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1770)
at com.cidog.abstractinfo.dao.DaoAbstractInfo.bringLstAtdwByAt(DaoAbstractInfo.java:502)
at com.cidog.abstractinfo.AiManager.bringAllAtdw(AiManager.java:367)
at com.cidog.irs.infoanaly.InfoAnalyManager.refreshModelWithScript(InfoAnalyManager.java:328)
at com.cidog.task.irs.Task_Analy.beforeSubtask(Task_Analy.java:326)
at com.cidog.task.irs.IrsTask.start(IrsTask.java:618)
at com.cidog.task.irs.IrsTask.readyAndStart(IrsTask.java:695)
at com.cidog.irs.CiCollectBotManager$2.run(CiCollectBotManager.java:442)
Caused by: java.lang.ClassNotFoundException: antlr.ANTLRException
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1352)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1180)
... 14 more
결국 exclusion 부분 지우고 사용 하면서 위의 문제2는 없어졌고,
원 문제도 다시 발견되진 않았으나,
언젠가 다시 보일 가능성도 있다고 생각됨.
- 위에선 antlr4-runtime 사용이지만
antlr4 로 고쳐서 사용중
<groupId>org.antlr</groupId>
<artifactId>antlr4</artifactId>
<version>4.7.1</version>
'SW개발 > ANTLR' 카테고리의 다른 글
파싱 결과가 물음표로 나오는 문제 (0) | 2018.08.16 |
---|---|
언어 개발용 프로젝트를 따로 분리해서 사용하기 (0) | 2018.07.30 |
작성중 / ParserRuleContext (0) | 2018.07.27 |
listener 사용 (0) | 2018.07.27 |
Listener , Visitor 비교 (0) | 2018.07.27 |