使用Ant组合文件集
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Ant组合文件集相关的知识,希望对你有一定的参考价值。
我在Ant中定义了两个不同的文件集,如下所示:
<fileset id="fileset1" dir="${classes.dir}">
</fileset>
<zipfileset id="fileset2" src="myArchive.zip" includes="**/*.class">
</zipfileset>
我想创建第三个文件集,它是上述两个文件集的并集
<fileset id="merged">
</fileset>
谁能告诉我怎么做?甚至可以做那样的事情吗?提前致谢!
一种方法是使用Ant resource collections,特别是union
。
<fileset id="fileset1" dir="${classes.dir}" />
<zipfileset id="fileset2" src="myArchive.zip" includes="**/*.class" />
<union id="onion">
<resources refid="fileset1" />
<resources refid="fileset2" />
</union>
然后,您可以在任何可能使用文件集的地方参考“洋葱”,例如
<copy todir="dest">
<resources refid="onion" />
</copy>
我建议使用通用的resources
元素而不是文件集以获得最大的灵活性。
试试这个:我认为它应该有效,因为<fileset>
是隐含的<patternset>
。
<fileset id="fileset1" dir="${classes.dir}">
</fileset>
<zipfileset id="fileset2" src="myArchive.zip" includes="**/*.class">
</zipfileset>
编辑:奇怪。这或许呢?
<patternset id="merged">
<patternset refid="fileset1" />
<patternset refid="fileset2" />
</patternset>
fileset的问题是,它需要一个目录作为基础,它应用了模式集。这意味着您必须找到所有文件集共享的公共基目录。
<pathconvert>
任务可以通过refid获取文件集。您可以放置多个文件集(例如,来自各种构建目标,以在模块化构建环境的根/主目标中组合化合物集):
<project name="root" basedir="." xmlns:if="ant:if" xmlns:unless="ant:unless">
<!--
it's important to take the xmlns:features in your project head
otherwhise this code won't work
-->
<target name="init">
<!-- set some common prerequisites -->
<property name="prerequisite.property.xyz" value="xyz" />
</target>
<target name="targetA" depends="init">
<fileset dir="${common.basedir}${file.separator}${targetA.subdir}" id="targetA.fileset">
<include name="**/*.html" />
</fileset>
<property name="targetA.fileset.exists" value="true" />
</target>
<target name="targetB" depends="init">
<fileset dir="${common.basedir}${file.separator}${targetB.subdir}" id="targetB.fileset">
<include name="**/*.java" />
</fileset>
<property name="targetB.fileset.exists" value="true" />
</target>
<target name="targetC" depends="init">
<fileset dir="${common.basedir}${file.separator}${targetC.subdir}" id="targetC.fileset">
<include name="**/*.class" />
</fileset>
<property name="targetC.fileset.exists" value="true" />
</target>
<target name="root" depends="init">
<pathconvert property="all.files.as.commaseparated.path" pathsep="," dirsep="/">
<fileset refid="targetA.fileset" if:true="${targetA.fileset.exists}" />
<fileset refid="targetB.fileset" if:true="${targetB.fileset.exists}" />
<fileset refid="targetC.fileset" if:true="${targetC.fileset.exists}" />
<map from="${common.basedir}/" to="" />
</pathconvert>
<!-- assemble new fileset from paths as comma separated property string -->
<fileset id="new.refid" dir="${common.basedir}" includes="${all.files.as.commaseparated.path}" />
</target>
</project>
这可以通过命令行调用,如:
ant targetA targetB targetC root
要么
ant targetA root
请注意,root始终是被调用的最后一个目标。
以上是关于使用Ant组合文件集的主要内容,如果未能解决你的问题,请参考以下文章
NDK: ant 错误 [javah] Exception in thread "main" java.lang.NullPointerException 多种解决办法(代码片段
解决未能加载文件或程序集“Newtonsoft.Json ...."或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)(代码片段