【问题标题】:Unable to Start Grails using ant无法使用 ant 启动 Grails
【发布时间】:2013-12-30 14:54:48
【问题描述】:

我正在将一个项目从 grails 1.3.6 切换到 grails 2.2.4。该项目建立在一个独立的构建VM上,并使用ant 1.7.1。系统变量设置为指向 ant 1.7.1 和 grails 2.2.4。 Grails 2.2.4 使用windows 命令行成功启动。这是应该编译 grails 文件的 ant 脚本的摘录:

任务设置-

<path id="grails.classpath">
  <fileset dir="${env.grails.home}/dist" includes="grails-bootstrap-*.jar"/>
  <fileset dir="${env.grails.home}/lib">
    <include name="**/groovy-all*.jar"/>
    <include name="**/ivy*.jar"/>
    <include name="**/gpars*.jar"/>
    <include name="**/gant_groovy*.jar"/>
  </fileset>
</path>

<taskdef name="grails" classname="grails.ant.GrailsTask"   classpathref="grails.classpath"/>

初始化执行:

<target name="-init">
  <record name="C:/log/compile_output.log" />
  <echo level="verbose">Deleting old compiled binaries, if existing...</echo>
  <delete dir="${dir.binaries}" failonerror="false" includeemptydirs="true"/>
  <delete dir="${dir.testBinaries}" failonerror="false" includeemptydirs="true"/>
  <grails home="${env.grails.home}" script="Clean"/>  ####THIS LINE IS FAILING
  <delete dir="${dir.dist}" failonerror="false" includeemptydirs="true"/>
  <echo level="verbose">Creating directories for the compiled binaries - '${dir.binaries}' and '${dir.testBinaries}' ...</echo>
  <mkdir dir="${dir.binaries}"/>
  <mkdir dir="${dir.testBinaries}"/>
  <mkdir dir="${dir.dist}"/>
  <grails home="${env.grails.home}" script="AddProxy" args="myProxy --host=webproxy.int.westgroup.com --port=80"/>
  <grails home="${env.grails.home}" script="SetProxy" args="myProxy"/>
</target>

&lt;grails home="${env.grails.home}" script="Clean"/&gt; 行失败。被吐出的堆栈跟踪如下:

D:\Builds\141\Cobalt PAC\PAC\Sources\ant\CompileAntScript.xml:72: Unable to star
t Grails: java.lang.reflect.InvocationTargetException
    at grails.ant.GrailsTask.runGrails(GrailsTask.java:137)
    at grails.ant.GrailsTask.execute(GrailsTask.java:98)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
 ...............
Caused by: java.lang.NoClassDefFoundError: jline/CompletionHandler
    at org.codehaus.groovy.grails.cli.GrailsScriptRunner.<init>(GrailsScript
Runner.java:96)

我还确保 grails 环境设置正确。使用调试输出,我看到Setting project property: env.grails.home -&gt; C:\grails-2.2.4 行。这么老的ant版本有冲突吗?

----编辑-----

我创建了一个新的 grails 项目,并在我的机器上运行了相同的命令。我得到了完全相同的问题,所以我猜这不是脏缓存问题。我还在构建服务器上尝试了 ant 1.8.2 并收到了同样的问题。

看起来与JIRA 8496有关

【问题讨论】:

    标签: grails ant build


    【解决方案1】:

    我在使用来自GrailsTask 的javadoc 信息的非常简单的ant 配置时遇到了同样的问题。最后,我按照Burt Beckwith 的描述为 grails 创建了一个宏,将 ant(1.8.4 版)与 grails(2.3.7 版)集成在一起。

    例子:

    <target name="init-grails">
      <property environment='env'/>
      <property name='grails.home' value='${env.GRAILS_HOME}' />
      <property name='grails.bin' value='${grails.home}/bin' />
      <condition property='grails' value='${grails.bin}/grails.bat'><os family='windows'/></condition>
      <property name='grails' value='${grails.bin}/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>
    </target>
    
    <target name="clean" depends="init-grails">
      <grails action="clean"/>
    </target>
    

    【讨论】:

      猜你喜欢
      • 2011-04-28
      • 2013-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 2013-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多