我有以下脚本,目的是制作战争文件。
def ant = new AntBuilder()
ant.ant(antfile:'build.xml', dir:APP_ROOT, target:'war')
不幸的是,当groovy试图运行ant.ant时,我得到了以下错误(...行
执行脚本War时出错:[Lorg / codehaus / groovy / runtime / callsite / CallSite;
[exec] java.lang.NoClassDefFoundError: [Lorg/codehaus/groovy/runtime/callsite/CallSite;
[exec] at java.lang.Class.getDeclaredMethods0(Native Method)
[exec] at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
[exec] at java.lang.Class.getDeclaredMethods(Class.java:1791)
[exec] at org.codehaus.groovy.reflection.CachedClass$1.run(CachedClass.java:134)
[exec] at java.security.AccessController.doPrivileged(Native Method)
[exec] at org.codehaus.groovy.reflection.CachedClass.getMethods(CachedClass.java:131)
我想知道还有另一种方法可以在groovy中使用antbuilder制作war文件吗?
答案 0 :(得分:1)
如果你的grails的groovy依赖与你本地安装的groovy版本不同,似乎会出现问题。当我尝试为已经安装了Groovy 1.6的依赖于Groovy 1.5的grails版本调用grails war
时,我可以重现相同的问题。 (顺便说一句,Grails-1.0-RC3依赖于Groovy 1.5.0,而CallSite是在Groovy-1.6中引入的。)当你调用grails war
时,grails会用错误的groovy版本编译脚本并填充脚本缓存。 / p>
要解决此类问题,我所做的是:
~/.grails/YOUR_GRAILS_VERSION/scriptCache/
文件夹中的所有文件。 每当你打电话时,Grails都会用正确的groovy版本编译脚本。我希望有所帮助。