【问题标题】:grails ant task, set different envrionmentgrails ant任务,设置不同的环境
【发布时间】:2011-07-28 23:01:44
【问题描述】:

尝试创建一个 grails ant 任务,该任务除了 prod 之外还有其他环境用于战争任务。

我试过了

<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} 进行了硬编码,所以并不是缺少它

【问题讨论】:

  • 我应该注意,无论它需要通过 cmd 行和 eclipse 工作的解决方案

标签: grails ant


【解决方案1】:

我为此使用了一个宏定义:

<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>

【讨论】:

  • 嘿伯特!这仍然不允许我在除 prod 之外的其他环境中使用内置于 ant 任务中的 grails。如果这是一个错误,则应报告,否则我想知道该怎么做。但我确实喜欢你的宏。如果没有其他办法,可能最终会走那条路。
  • 这很奇怪——我用上面的宏定义、条件和属性声明以及这些目标进行了测试,它使用测试环境创建了一个名为 test.war 的战争:跨度>
  • 我知道宏定义会起作用。我试图让 grails 引导程序中的内置 antTask 工作,而不必回退到 exec
  • 看来我可能不得不将完整路径放入可执行文件,因为 eclipse (STS) 找不到“grails”
  • 我必须做的唯一改变是从 移动到 才能能够传递我的自定义环境
【解决方案2】:

您可能想查看 grails 脚本来解决您的问题

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

它已经包装了 ANT,因此您可以在脚本中使用 ant 任务,我相信您可以访问环境和许多其他“常规”的东西

我认为如果你打算使用 ant,你也可以这样做,虽然我没有用 grails 脚本尝试过

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

【讨论】:

  • 我曾想过使用 exec,但它必须保留在 ant 中而不是 gant 中,因为它是更大的 j2ee 应用程序的一部分。我们正在努力推动 grails 项目并将其包含在一个更大的 .ear 中,这对环境非常有效
  • 最终不得不像你说的那样选择 exec,因为官方 grails ant 任务似乎不支持自定义 env 或其他任何东西,但我可以看到
【解决方案3】:

如果你进入你的项目目录并运行“grails --integrate-with -ant”,它将创建一个 build.xml,它将自动使用 ivy 下载依赖项和 grails,并为你创建宏 def。

您可以使用 build.xml 作为项目的起点

【讨论】:

  • 我认为这是新的,因为这个?被问。不再是问题
  • 我想为那些在谷歌上搜索这个问题的人添加这个信息 - 使用自动生成的 build.xml 对于新用户来说比复制和修改宏定义要少得多,如果他们是 ant 新手
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 2021-05-28
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多