Как сделать файл войны с муравьем в заводной?
У меня есть следующий сценарий, целью которого является создание файла войны.
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 компилирует свои скрипты по неверной версии и заполняет кеш скриптов.
Чтобы решить такие проблемы, я сделал следующее:
- Удалены все файлы в
~/.grails/YOUR_GRAILS_VERSION/scriptCache/
папка. - Удалите Groovy bin из пути или используйте правильную версию Groovy в вашей локальной системе.
Всякий раз, когда вы звоните, Grails будет компилировать скрипты с правильной отличной версией. Надеюсь, это поможет.