티스토리 뷰


* 개요 

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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함