回显到打印额外选项卡的文件

时间:2012-03-27 16:29:40

标签: ant

echo到文件时。 echo在打印内容之前打印额外的标签。

我不希望这些标签在那里,为什么ant这样做以及我如何阻止?

仅使用ant和/或ant-contrib。没别了。

<target 
    name="doThis">
    <delete 
        file="${PATH}/install.bat" 
        failonerror="true">
    </delete>

    <touch file="${PATH}/install.bat"></touch>

    <echo
        file="${PATH}/install.bat"
        level="verbose"
        append="true"
        message="if exist preinstall.bat call preinstall.bat${line.separator}">
    </echo>

    <foreach 
        trim="true"
        target="printStuff"
        param="stuffName">
        <path>
            <fileset dir="${basedir}/stuff/"></fileset>
        </path>
    </foreach>
</target>

<target 
    name="printStuff">
    <basename file="${stuffName}" property="stuffNameSmall"/>
    <echo
        file="${PATH}/install.bat"
        append="true"
        level="verbose"
        message="${stuffNameSmall}${line.separator}">
    </echo>
</target>

当前正在打印的输出示例:

<tab><tab>filename
<tab><tab>filename
<tab><tab>filename

2 个答案:

答案 0 :(得分:2)

我的预感:&lt; echo ...&gt;里面有2个标签字符&LT; /回波&GT; xml元素......

尝试:

<echo
    file="${PATH}/install.bat"
    append="true"
    level="verbose"
    message="${stuffNameSmall}${line.separator}" />

'echo'任务将打印出'message'属性值,以及嵌套文本节点内的所有内容。因此,如果您不需要打印额外的东西(比如多行ASCII艺术,哦,是的!),最好立即关闭标签。

答案 1 :(得分:0)

我建议使用groovy生成批处理脚本,而不是与ANT echo任务作斗争。

以下示例稍微复杂一些,因为我使用ivy来下载构建依赖项。

项目结构

$ tree
.
|-- build.xml
|-- ivy.xml
`-- stuff
    |-- script1
    |-- script2
    `-- script3

1 directory, 5 files

的build.xml

<project name="demo" default="generate-script" xmlns:ivy="antlib:org.apache.ivy.ant">

    <target name="init">
        <ivy:resolve/>
        <ivy:cachepath pathid="build.path" conf="build"/>

        <mkdir dir="build"/>
    </target>

    <target name="generate-script" depends="init">
        <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="build.path"/>

        <fileset id="files" dir="stuff"/> 

        <groovy>
        def batchScript = new File("build/install.bat")

        batchScript.withWriter() { writer ->
            writer.println "if exist preinstall.bat call preinstall.bat"

            project.references.files.each {
                def stuffFile = new File(it.toString())

                writer.println stuffFile.name 
            }
        }
        </groovy>
    </target>

    <target name="clean">
        <delete dir="build"/>
    </target>

</project>

的ivy.xml

<ivy-module version="2.0">
    <info organisation="org.myspotontheweb" module="demo"/>
    <configurations>
        <conf name="build" description="ANT tasks"/>
    </configurations>
    <dependencies>
        <!-- Build dependencies -->
        <dependency org="org.codehaus.groovy" name="groovy-all" rev="1.8.2" conf="build->default"/>
    </dependencies>
</ivy-module>

更新

这并不是使用常春藤的理由,但可以安装Maven Central提供的任何东西。

例如ant-contrib

  <dependency org="ant-contrib" name="ant-contrib" rev="1.0b3"/>