Как сделать файл войны с муравьем в заводной?

У меня есть следующий сценарий, целью которого является создание файла войны.

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

к сожалению, я получаю следующую ошибку, когда groovy пытается запустить ant.ant(... line

Ошибка при выполнении сценария 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)

Мне было интересно, есть ли другой способ сделать военный файл с antbuilder в Groovy?

1 ответ

Решение

Кажется, проблема возникает, если Groovy-зависимость вашего grails отличается от Groovy-версии, установленной в вашей локальной системе. Я мог воспроизвести ту же проблему, когда пытался позвонить grails war для версии Grails, зависящей от Groovy 1.5, с уже установленной Groovy 1.6. (Кстати, Grails-1.0-RC3 зависит от Groovy 1.5.0, а CallSite представлен в Groovy-1.6.) Когда вы звоните grails war, grails компилирует свои скрипты по неверной версии и заполняет кеш скриптов.

Чтобы решить такие проблемы, я сделал следующее:

  1. Удалены все файлы в ~/.grails/YOUR_GRAILS_VERSION/scriptCache/ папка.
  2. Удалите Groovy bin из пути или используйте правильную версию Groovy в вашей локальной системе.

Всякий раз, когда вы звоните, Grails будет компилировать скрипты с правильной отличной версией. Надеюсь, это поможет.

Другие вопросы по тегам