文件列表中每个元素的Ant zipfileset

时间:2013-10-08 17:23:05

标签: java ant jar

使用stock ant,是否可以为文件列表中的每个元素使用zipfileset?我正在寻找一种方法来指定我正在使用的jar列表,​​然后能够将其指定为类路径以及要在我自己的jar中部署的文件。

这是构建我的发布jar并包含所有类文件的最快方法,但它需要将每个jar指定为zipfileset

<jar destfile="release.jar">
    ... my files ...
    <zipfileset src="jar/exampleA.jar" includes="**/*.class"/>
    <zipfileset src="jar/exampleB.jar" includes="**/*.class"/>
</jar>

我更愿意指定它:

<filelist id="proj.jars" dir="jar">
    <file id="exampleA" name="exampleA.jar"/>
    <file id="exampleB" name="exampleB.jar"/>
</filelist>

<jar destfile="release.jar">
    ... my files ...
    <!-- for each jar in proj.jars -->
        <zipfileset src="${jar}" includes="**/*.class"/>
</jar>

我确实有一个可行的解决方案,但速度要慢得多(慢4或5倍)

<jar destfile="release.jar">
    ... my files ...
    <restrict>
        <name name="**/*.class"/>
        <archives>
            <zips>
                <filelist refid="proj.jars"/>
            </zips>
       </archives>
    </restrict>
</jar>

可以找到相关问题here,但使用zipgroupfileset并且不能用于从zip文件中排除文件。

1 个答案:

答案 0 :(得分:1)

使用restrict / archive / zips版本需要花多长时间。

我们当前的解决方案是将它们解开到一个临时目录,并通过zipfileset包含它们:

<unjar dest="${include-in-jar.tmpdir}">
    <patternset><exclude name="**/*.MF"/></patternset>
    <path refid="include-in-jar.classpath" />
</unjar>
<war ...>
    <zipfileset dir="${include-in-jar.tmpdir}" includes="**/*" />
</war>

这需要4秒而不是限制/存档/拉链需要的40秒。