1

warファイルを作成するための次のスクリプトがあります。

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

残念ながら、groovy が ant.ant(... 行を実行しようとすると、次のエラーが発生します。

スクリプト戦争の実行エラー: [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ファイルを作成する別の方法があるのではないかと思っていましたか?

4

1 に答える 1

1

grails の groovy 依存関係が、ローカルにインストールされている groovy バージョンと異なる場合に問題が発生するようです。grails warGroovy 1.6 が既にインストールされている状態で、Groovy 1.5 に依存する grails バージョンを呼び出そうとしたときに、同じ問題を再現できました。(ところで、Grails-1.0-RC3 は Groovy 1.5.0 に依存しており、CallSite は Groovy-1.6 で導入されています。) を呼び出すとgrails war、grails は間違った Groovy バージョンでスクリプトをコンパイルし、スクリプト キャッシュをいっぱいにします。

この種の問題を解決するために、私がしたことは次のとおりです。

  1. フォルダ内のすべてのファイルを削除しました~/.grails/YOUR_GRAILS_VERSION/scriptCache/
  2. Groovy bin をパスから削除するか、ローカルで正しい Groovy バージョンを使用してください

呼び出すたびに、Grails は正しい Groovy バージョンでスクリプトをコンパイルします。それが役立つことを願っています。

于 2012-02-16T09:27:33.320 に答える