1

我有以下旨在制作战争文件的脚本。

 def ant = new AntBuilder()
 ant.ant(antfile:'build.xml', dir:APP_ROOT, target:'war')

不幸的是,当 groovy 尝试运行 ant.ant(... line

执行脚本战争时出错:[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 制作战争文件?

4

1 回答 1

1

如果 grails 的 groovy 依赖项与本地安装的 groovy 版本不同,则似乎会出现问题。当我尝试调用grails war依赖于 Groovy 1.5 且已安装 Groovy 1.6 的 grails 版本时,我可以重现相同的问题。(顺便说一句,Grails-1.0-RC3 依赖于 Groovy 1.5.0,并且在 Groovy-1.6 中引入了 CallSite。)当您调用时grails war,grails 会通过错误的 groovy 版本编译其脚本并填充脚本缓存。

为了解决这类问题,我所做的是:

  1. 删除文件~/.grails/YOUR_GRAILS_VERSION/scriptCache/夹中的所有文件。
  2. 从路径中删除 Groovy bin 或在本地使用正确的 groovy 版本

无论何时调用,Grails 都会使用正确的 groovy 版本编译脚本。我希望这会有所帮助。

于 2012-02-16T09:27:33.320 回答