Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以编程方式连接ANT?_Ant_Build Process_Concatenation - Fatal编程技术网

如何以编程方式连接ANT?

如何以编程方式连接ANT?,ant,build-process,concatenation,Ant,Build Process,Concatenation,让我先说一句,我是ant的新手,如果重要的话,我使用的是1.6.5版 我有一个包含要连接的文件列表的文件。我第一次尝试的相关部分是: <target name="for-each"> <xmlproperty file="scripts.xml" collapseAttributes="true" /> <echo message="testing for-each"/> <concat destfile="${out}" fix

让我先说一句,我是ant的新手,如果重要的话,我使用的是1.6.5版

我有一个包含要连接的文件列表的文件。我第一次尝试的相关部分是:

<target name="for-each">
    <xmlproperty file="scripts.xml" collapseAttributes="true" />
    <echo message="testing for-each"/>
    <concat destfile="${out}" fixlastline="yes" eol="lf">
        <foreach list="${scripts.src}" target="loop" param="var" delimiter=","/>
    </concat>
</target>

<target name="loop">
    <echo message="File :: ${var}"/>
    <fileset file="${SRC_DIR}${var}" />
</target>

但是,concat不支持foreach元素

我不想简单地将一个文件集剪切并粘贴到concat元素中,因为它是重复使用的,并且可能会在原始文件中经常更改,所以我希望通过编程迭代文件中列出的脚本元素


正确的语法是什么?我将如何实现这一点?

我认为您的要求是:

  • 从另一个xml文件加载文件列表
  • 将此文件列表合并在一起
如果是这样的话,你就没有理由做你自己的程序循环。您可以执行以下操作:

scripts.xml


文件1
文件2
build.xml



是这样吗?

像这样的东西可能有用(没有尝试过)


此解决方案使用的是Ant 1.8.1--我试图找出如何按特定顺序压缩多个文件--似乎唯一的方法是使用文件列表。以下是我的想法:

给定一个包含文件名列表的文件:

files.list:
-------------

file1.txt
file2.txt
file3.txt
将此文件加载到ant属性中,并使用filterchain将行后缀为“,”并删除任何换行符:

<!-- put list in format for filelist element -->
<loadfile property="file.includes" srcFile="files.list">
    <filterchain>
        <suffixlines suffix=", "/>
        <striplinebreaks/>
    </filterchain>
</loadfile>

这将把以下值放入${file.includes}属性:“file1.txt、file2.txt、file3.txt”。此字符串的格式正确,现在可以在filelist元素中使用,因此您可以使用filelist和${file.includes}属性:

<concat destfile="${dest.file}" fixlastline="yes">
    <filelist dir="${basedir}" files="${file.includes}"/>
</concat>


希望这对某人有帮助。

嗯。。。我希望它会像这样简单,但根据,文件是一个文件名列表,用空格或逗号分隔。因此,我的scripts.xml文件必须将该列表放在某个地方的单个属性值中,或者作为单个逗号分隔的子项,对吗?我想我是在问,我对文件集的使用是否比看起来更灵活,或者我是否必须有一个符合文件列表要求的XML文件?文件集主要由排除定义,文件列表由包含定义。如果你有一个简短的文件列表,我会坚持使用文件列表。否则,如果您的文件遵循某种模式或可能有很多,请仔细创建一个文件集,以选择正确的文件。我很确定如果
运行到:它将把值包含到一个属性${List.Item}中。这可能就是你想要的。+1,我会试试看,看看我能做些什么,但你肯定让我更接近一个解决方案。没问题。蚂蚁只能做这么多。对于我的一些更大的ANT进程,我用python编写模块来完成更难的工作,并从ANT启动它。谢谢,不过如果您稍微更改一下filterchain,只需使用一个“”。此解决方案还有一个好处,即根据文件的列出顺序包含这些文件。
files.list:
-------------

file1.txt
file2.txt
file3.txt
<!-- put list in format for filelist element -->
<loadfile property="file.includes" srcFile="files.list">
    <filterchain>
        <suffixlines suffix=", "/>
        <striplinebreaks/>
    </filterchain>
</loadfile>
<concat destfile="${dest.file}" fixlastline="yes">
    <filelist dir="${basedir}" files="${file.includes}"/>
</concat>