2

我有以下 ant 构建文件,它尝试连接一堆 JavaScript 文件,以便我可以编写模块化代码,但只交付一个 js 文件。每次我在项目中保存文件时,Eclipse 都会自动运行该脚本,这极大地简化了我的工作流程。

我的问题

当 Eclipse 执行构建脚本时,一切都很好。如果我尝试直接从命令行运行 ant,我会收到一条错误消息:

/home/formigone/html5voodoo/build.xml:38: file attribute is null!

这是我的脚本:

<?xml version="1.0" encoding="UTF-8"?>
<project name="Build example" default="all" basedir=".">
    // ...
    <property name="SRC_JS_DIR" value="${basedir}/js/hvdoo" />
    <property name="DIST_JS_DIR" value="${basedir}/js/out" />
    <property name="DIST_JS_TMP" value="${basedir}/js/out/tmp" />

    // ...

    <property name="JS_OUT_DEF" value="${DIST_JS_TMP}/__def.js" />
    <property name="JS_OUT_CODE" value="${DIST_JS_TMP}/__code.js" />
    <property name="JS_OUT_LINKED" value="${DIST_JS_TMP}/__out.js" />

    <target name="makeDef">
        <concat destfile="${JS_OUT_DEF}">
            <fileset dir="${SRC_JS_DIR}" 
                includes="**/__def.js" />
        </concat>
    </target>

    <target name="makeCode">
        <concat destfile="${JS_OUT_CODE}">
            <fileset dir="${SRC_JS_DIR}" 
                includes="**/*.js" 
                excludes="**/__*.js" />
        </concat>
    </target>

    <target name="link">
        <concat destfile="${JS_OUT_LINKED}">
            <file name="${JS_OUT_DEF}" />
            <file name="${JS_OUT_CODE}" />
        </concat>
    </target>

    // ...

<target name="quick" depends="makeDef, makeCode, linkToOut"></target>

(我故意省略了这里没有问题的脚本的其他部分)

错误消息指的是链接目标内的这一行:

<concat destfile="${JS_OUT_LINKED}">

什么文件属性为空!在这种情况下是什么意思?如果 I ,我可以看到我想要的文件的路径是正确的。那么为什么它可以在 Eclipse 中工作,而不是 com CLI?

谢谢!

4

1 回答 1

4

事实证明,问题在于该<concat>块缺少<filelist>用于包装单个文件的 a 。现在工作脚本如下所示:

<target name="link">
    <concat destfile="${JS_OUT_LINKED}">
        <filelist dir="${DIST_JS_TMP}">
            <file name="${JS_OUT_DEF}" />
            <file name="${JS_OUT_CODE}" />
        </filelist>
    </concat>
</target>

我仍然不确定 Eclipse 是如何让脚本运行的,但我想我并不在意,因为它可以双向工作。

于 2013-08-10T16:29:46.060 回答