我有下面的脚本,目的是制作一个war文件。
def ant = new AntBuilder()
ant.ant(antfile:'build.xml', dir:APP_ROOT, target:'war')
不幸的是,当groovy尝试运行ant.ant(…行)时,我得到了以下错误
执行脚本War:[Log/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文件?
如果grails的groovy依赖项与本地安装的groovo版本不同,那么问题似乎就会出现。当我试图为依赖Groovy1.5的grails版本调用grails war
时,我可以重现同样的问题,Groovy1.6已经安装。(顺便说一句,Grails-1.0-RC3依赖于Groovy1.5.0,在Groovy-1.6中引入了CallSite。)当您调用grails war
时,Grails会用错误的Groovy版本编译其脚本,并填充脚本缓存。
为了解决这类问题,我所做的是:
- 删除了
~/.grails/YOUR_GRAILS_VERSION/scriptCache/
文件夹中的所有文件 - 从路径中删除groovyBin或在中使用正确的Groovy版本您当地的
无论何时调用,Grails都会使用正确的groovy版本编译脚本。我希望这能有所帮助。