2012-02-09 27 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將編譯正確的常規版本的腳本。我希望有所幫助。