Groovy ';AST不可用';筛选数据集时发生异常
我有以下groovy程序-Groovy ';AST不可用';筛选数据集时发生异常,groovy,groovy-sql,Groovy,Groovy Sql,我有以下groovy程序- def people = sql.dataSet('players') def d = people.findAll { true } print d.rows() 我在print语句中遇到一个异常 groovy.lang.GroovyRuntimeException: DataSet unable to evaluate expression. AST not available for closure: in.kshitiz.pgnimport.dao.Play
def people = sql.dataSet('players')
def d = people.findAll { true }
print d.rows()
我在print语句中遇到一个异常
groovy.lang.GroovyRuntimeException: DataSet unable to evaluate expression. AST not available for closure: in.kshitiz.pgnimport.dao.PlayerDao$_get_closure1. Is the source code on the classpath?
at groovy.sql.DataSet.visit(DataSet.java:300)
at groovy.sql.DataSet.getSqlWhereVisitor(DataSet.java:283)
at groovy.sql.DataSet.getSqlWhere(DataSet.java:230)
at groovy.sql.DataSet.getSql(DataSet.java:257)
at groovy.sql.DataSet.rows(DataSet.java:332)
at groovy.sql.DataSet$rows.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)
at in.kshitiz.pgnimport.dao.PlayerDao.get(PlayerDao.groovy:13)
at in.kshitiz.pgnimport.dao.PlayerDao$get.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
at in.kshitiz.pgnimport.dao.PlayerDaoTest.testGet(PlayerDaoTest.groovy:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
这个例外没有多大帮助。这意味着什么?只需将groovy DAO源代码添加到类路径中即可解决问题 在邮件列表中,Guillaume Laforge说: Sql类的使用有一个转折点 它需要您的Groovy类源代码可用——比如在运行Groovy myScript.Groovy时 例如,当一个类被预编译时,“类节点”将不再可用,因为它不存储在字节码中 这可能是你在这里面临的问题 类节点对于
findall{}
部分是必需的,在这里我们访问AST以创建一个临时查询
摘自(第10章,第343页,第4段)——
数据集实现获取Groovy的
关闭代码。这种内部表示称为
抽象语法树(AST),并由Groovy解析器生成。
通过遍历AST(使用访问者模式),数据集
实现发出每个AST节点的SQL等价物
只需将groovy DAO源代码添加到类路径中即可解决问题 在邮件列表中,Guillaume Laforge说: Sql类的使用有一个转折点 它需要您的Groovy类源代码可用——比如在运行Groovy myScript.Groovy时 例如,当一个类被预编译时,“类节点”将不再可用,因为它不存储在字节码中 这可能是你在这里面临的问题 类节点对于
findall{}
部分是必需的,在这里我们访问AST以创建一个临时查询
摘自(第10章,第343页,第4段)——
数据集实现获取Groovy的
关闭代码。这种内部表示称为
抽象语法树(AST),并由Groovy解析器生成。
通过遍历AST(使用访问者模式),数据集
实现发出每个AST节点的SQL等价物
people.findAll{true}
在闭包中不应该有一些条件语句吗?就像people.findAll{it.age>18}
?@kunal最终不会it.age>18
计算出一个布尔值?@tim_-yates。你想补充这一点作为答案吗?@kshitizzarma是的,你是对的,我只是在猜测一些可能是错误的方向:)不应该people.findAll{true}
在结尾处有一些条件语句吗?就像people.findAll{it.age>18}
?@kunal最终不会it.age>18
计算出一个布尔值?@tim_-yates。你想补充一下吗?@KshitizSharma是的,你是对的,我只是猜测了一些可能是错误的方向:)有没有可能你知道如何让Eclipse自动将java
文件复制到target
?有没有可能你知道如何让Eclipse自动将java
文件复制到target
?