如何在groovy中使用ant创建war文件?

时间:2012-02-09 09:18:27

标签: grails groovy antbuilder

我有以下脚本,目的是制作战争文件。

 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文件吗?

1 个答案:

答案 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>

要解决此类问题,我所做的是:

  1. 删除了~/.grails/YOUR_GRAILS_VERSION/scriptCache/文件夹中的所有文件。
  2. 从路径中删除Groovy bin或使用正确的groovy版本 你当地的
  3. 每当你打电话时,Grails都会用正确的groovy版本编译脚本。我希望有所帮助。