2012-02-09 57 views
1

我有以下脚本是为了制作一个战争文件。如何在groovy中使用ant制作战争文件?

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

不幸的是我收到以下错误,当常规尝试运行ant.ant(...线

错误执行脚本的战争:[Lorg/Codehaus的/常规/运行/调用点/调用点;

[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) 

我想知道是否有其他的方法,使战争的文件,antbuilder在常规?

+0

我会说'CallSite'不在你的类路径中,但这是显而易见的不是吗?你可以尝试'“ant”.execute()。waitFor()'如果你只是想启动ant并等待进程完成。 – Peter 2012-02-09 12:22:20

+0

感谢您的评论CallSite已经在classpath中。我想这个问题与grails的版本有关。 – 2012-02-10 08:24:33

回答

1

看来,如果你的Grails的常规依赖性比出现不同的问题在您的本地安装groovy版本。当我试图调用grails war来获得依赖于Groovy 1.5的Grails版本时,我可以重现相同的问题,而Groovy 1.6已经安装了Groovy 1.6。 (顺便说一下,Grails-1.0-RC3依赖于Groovy 1.5.0,而CallSite则在Groovy-1.6中引入)。当你调用grails war时,grails通过错误的groovy版本编译脚本并填充脚本缓存。

要解决这种问题,我所做的是:

  1. 在删除文件夹~/.grails/YOUR_GRAILS_VERSION/scriptCache/的所有文件。
  2. 从通道中取出的Groovy仓或 使用正确的常规版本的本地

每当你打电话,Grails将编译正确的常规版本的脚本。我希望有所帮助。