Rajas Gujarathi
Rajas Gujarathi

Reputation: 774

java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I using only hibernate

I an using hibernate 5.1.0 Final version. There is no Spring, Struts, Application Server ...

When I run my method from the same package I do not get this error. But when I call this method from other package I get this error.

Exception in thread "main" java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
    at org.hibernate.hql.internal.ast.HqlSqlWalker.generateNamedParameter(HqlSqlWalker.java:1092)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.parameter(HqlSqlBaseWalker.java:3422)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1370)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4713)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:4186)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2130)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:813)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:607)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:311)
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:259)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:262)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:190)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:142)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:76)
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:150)
    at org.hibernate.internal.NamedQueryRepository.checkNamedQueries(NamedQueryRepository.java:155)
    at org.hibernate.internal.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:764)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:474)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:465)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:881)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)

enter image description here

Upvotes: 2

Views: 4591

Answers (2)

hunter
hunter

Reputation: 4183

This getLine() method was introduced from antlr version 2.7.3. If you get a NoSuchMethodError the class loader has loaded the AST class from a lower/different version of antlr.

If you can debug the run-time, add a break point to anywhere and try to execute the following code line

Class.forName("antlr.collections.AST").getResource("AST.class")

This will show you the location that class has been loaded from.

Upvotes: 1

Abhishek Chatterjee
Abhishek Chatterjee

Reputation: 2049

Yes, I also found that its due to old version of antlr.jar.

But in addition to this I think hibernate 5.0 depends on the new version of antlr.jar (2.7.7) and this is as expected. So the conflict was not with hibernate dependencies, but in my case it was coming from velocity-tools.jar. velocity-tools -> struts-core -> antlr.jar (old version)

Upvotes: 2

Related Questions