2010-08-31 2 views
0

Попытка создать задачу grails ant, в которой есть другие среды, помимо prod для военной задачи.grails ant task, set different envrionment

Я попытался

<target name="war" depends="-init-grails" description="--> Creates a WAR of a Grails application"> 
     <grails script="War" args="grails.env=${env} ${war.filename}"/> 
</target> 

и

<target name="war" depends="-init-grails" description="--> Creates a WAR of a Grails application"> 
     <grails script="War" args="-Dgrails.env=${env} ${war.filename}"/> 
</target> 

Ни один из этих двух работ и всегда просто запустить производство окр. Обратите внимание, что я также жестко $ {ENV}, так что это не то, что он отсутствует

+0

я должен отметить, что независимо от решения он должен работать через CMD линии и в затмении – dstarh

ответ

5

Я использую macrodef для этого:

<property environment='env'/> 

<property name='grails.home' value='${env.GRAILS_HOME}' /> 

<condition property='grails' value='grails.bat'> 
    <os family='windows'/> 
</condition> 
<property name='grails' value='grails' /> 

<macrodef name='grails'> 
    <attribute name='action' /> 
    <attribute name='environment' default='dev' /> 
    <element name='preargs' optional='true' /> 
    <element name='args' optional='true' /> 
    <sequential> 
     <exec executable='${grails}' failonerror='true'> 
     <preargs /> 
     <arg value='@{environment}'/> 
     <arg value='@{action}'/> 
     <args /> 
     </exec> 
    </sequential> 
</macrodef> 

Вы можете выполнять простые команды:

<grails action='clean' /> 

или более сложные, как ваша войны задача:

<grails action='war' environment='${env}'> 
    <args> 
     <arg value="${war.filename}" /> 
    </args> 
</grails> 
+0

Эй, бур! Это все еще не позволяет мне использовать grails, созданный в ant-задачах с другими средами, чем prod. Если это ошибка, о ней следует сообщить, если нет, то я хотел бы знать, как это сделать. Но мне нравится ваш макрос. Может закончиться тем маршрутом, если ничего не работает. – dstarh

+0

Это странно - я тестировал это с помощью указанных выше макродефов, условий и деклараций свойств и этих целей, и он создал войну под названием test.war с использованием теста env: <имя свойства = 'env' value = 'test' />

+0

Я знаю, что macrodef будет работать. Я пытался получить встроенный antTask, что находится в Граалей Bootstrap работать без падать обратно EXEC – dstarh

1

вы можете захотеть взглянуть на Grails сценариев, чтобы решить вашу проблему

http://www.grails.org/Command+Line+Scripting

он обернул ANT, так что вы можете использовать анти-задачи внутри скриптов, и я считаю, что у вас есть доступ к окружающей среде и множеству других «хороших» вещей.

Я думаю, вы также можете это сделать, если вы настроили на использование муравья, хотя я не использовал его с помощью скриптов grails

<exec executable="grails" failonerror="true"> 
    <arg line='-c war grails.env=${env} ${war.filename}' /> 
</exec> 
+0

я думал использовать Exec, но он должен оставаться в мураве, а не gant, так как он является частью гораздо более крупного приложения j2ee. Мы пытаемся запустить проект Grails и включить его в более крупный .ear, который отлично подходит для окружающей среды. – dstarh

+0

закончил работу с exec, как вы сказали, поскольку официальная задача grails ant не поддерживает пользовательские env или что-то еще, кроме того, что я могу видеть. – dstarh

0

если вы идете в вашем каталоге проекта и запустите «grails -integrate-with -ant», он создаст файл build.xml, который автоматически будет использовать плющ для загружать зависимости и grails и создает для вас макрос def.

Вы можете использовать build.xml в качестве отправной точки для вашего проекта

+0

Я предполагаю, что это новое, поскольку это было спрошено. Больше не проблема – dstarh

+0

Я хотел бы добавить эту информацию для людей, отправляющих эту проблему, используя автоматически сгенерированный файл build.xml намного менее сложный для нового пользователя чем копирование и изменение макросов defs, если они новы к муравьям – Nick