2013-07-15 121 views
0

我想实现一个类似zipgroupfileset的替代Ant类型,但接受类路径类的字符串作为输入。扩展Ant zipgroupfileset类型

我的问题是:即使在下载apache ant的源代码时,我也找不到任何有关它的代码或实现特定信息,没有typedef也没有扩展类。 zipgroupfileset甚至似乎没有正确记录。有关此类型的主要文件似乎是在Zip Task documentation这个很短的一段:

zipgroupfileset

一个zipgroupfileset允许多个zip文件合并到 存档。在该文件集中找到的每个文件都以与添加zipfileset src文件相同的方式添加到存档 。

zipgroupfileset是一个文件集并支持其所有属性和 嵌套元素。

我的错误在哪里?

+0

在开始尝试为自己实现此功能之前,请检查现有[''](http://ant.apache.org/manual/Types/resources.html#archives)资源集合是否可以满足您的需求。 –

+0

不知道这是否可以帮助我:我需要评估一个变量,比如'libs/a.jar; libs/b.jar; bin/c.jar',并使用''任务将其所有内容包含到新jar中 –

+0

谢谢伊恩。这似乎对我来说是一个解决方案。 –

回答

4

我需要评估像libs/a.jar;libs/b.jar;bin/c.jar一个变量,包括使用<jar>任务到一个新的jar所有内容

可以使用<archives> resource collection type,可用,因为蚂蚁1.8

<property name="jars.to.include" value="libs/a.jar;libs/b.jar;bin/c.jar" /> 

<jar destfile="dest.jar"> 
    <archives> 
    <zips> 
     <path path="${jars.to.include}" /> 
    </zips> 
    </archives> 
</jar> 
做到这一点

关于zipgroupfileset本身:

我找不到任何代码或特定于实现的信息,没有typedef和扩展类。

没有特定的类表示zipgroupfileset,逻辑是embedded in the zip task implementation。该Zip任务具有

public void addZipGroupFileset(FileSet set) 

所以在XML标签<zipgroupfileset>被视为定义一个普通FileSet - 当执行压缩(或jar)任务,你可以合法地做

<fileset id="lib.jars" dir="lib" includes="*.jar" /> 

<jar destfile="dest.jar"> 
    <zipgroupfileset refid="lib.jars" /> 
</jar> 

,每个将依次检查“组”文件集,并为该组包含一个新的ZipFileSet的每个zip/jar文件生成该文件读取,并将生成的ZipFileSet的内容添加到目标归档。

+0

这确实解决了我的具体问题。但是我会等待几天接受,希望有人回答关于zipgroupfileset实现的问题。无论如何感谢 –

+0

@DanielAlder没有zipgroupfileset的“实现”,因此标签被实现为[zip任务内的特例](http://svn.apache.org/viewvc/ant/core/tags/ANT_192 /src/main/org/apache/tools/ant/taskdefs/Zip.java?view=markup#l851),它是zip/jar文件的普通文件集,它被“相乘”成一组'在运行时等价。 –

+0

我看到了这段代码。但是这意味着也可以使用zipfileset而不是zipgroupfileset?我找不到任何等于(“zipgroupfileset”)或类似的东西。 –