我正在使用 Ant 1.7,想要从不同路径复制文件(它们没有关系,所以我无法使用 include 选择器将它们从根目录中过滤出来)。我尝试使用
<path>
内的 <copy>
而不是 <fileset>
,因为使用 <path>
我可以指定 <fileset>
中不可能的多路径。我的ant脚本看起来像这样,但它不起作用。
<target name="copytest">
<!-- copy all files in test1 and test2 into test3 -->
<copy todir="E:/test3">
<path>
<pathelement path="C:/test1;D:/test2"></pathelement>
</path>
</copy>
</target>
有人知道如何使用
<path>
中的 <copy>
吗?或者也许有人有关于如何在没有选择器的情况下从不同源复制文件的建议?
顺便说一句,我不想对源目录进行硬编码,它们将从属性文件中读取,因此不应考虑在
<fileset>
内写入多个 <copy>
。
提前致谢!
仅当
flatten
属性设置为 true
时才有效:
<copy todir="E:/test3" flatten="true">
<path>
<pathelement path="C:/test1;D:/test2"></pathelement>
</path>
</copy>
这记录在
Ant Copy 任务文档的
Examples
部分。
<pathelement>
通常使用它的path
属性作为对classpath
或其他预定义位置的引用,如果您想给出特定的文件位置在类路径之外尝试使用location
属性
<pathelement location="D:\lib\helper.jar"/>
location属性指定相对于单个文件或目录 到项目的基目录(或绝对文件名),而 path 属性接受以冒号或分号分隔的列表 地点。路径属性旨在与预定义一起使用 路径 - 在任何其他情况下,具有位置属性的多个元素 应该是首选。
我们有同样的问题
稍微复杂一点,我们需要为从路径转换的每个文件集添加指定的模式集
例如这是传入的数据
<path id="myDirList" path="C:/test1;D:/test2" />
<patternset id="myPatterns" includes="*.html, *.css, etc, " />
我们编写了一个脚本来解决这个问题
<resources id="myFilesetGroup">
<!-- mulitiple filesets to be generated here
<fileset dir="... dir1, dir2 ...">
<patternset refid="myPatterns"/>
</fileset>
-->
</resources>
<script language="javascript"><![CDATA[
(function () {
var resources = project.getReference("myFilesetGroup");
var sourceDirs = project.getReference("myDirList").list();
var patterRef = new Packages.org.apache.tools.ant.types.Reference(project, "myPatterns");
for (var i = 0; i < sourceDirs.length; i++) {
var fileSet = project.createDataType("fileset");
fileSet.dir = new java.io.File(sourceDirs[i]);
fileSet.createPatternSet().refid = patterRef;
resources.add(fileSet);
}
})();
]]></script>
现在您可以在复制任务中使用此资源
<!-- copy all files in test1 and test2 into test3 -->
<copy todir="E:/test3">
<resources refid="myFilesetGroup">
</copy>
</copy>
其中类路径是用于路径元素的路径的引用。
I tried this and works fine
<fileset file="${jackson.jaxrs.lib}"/>