【问题标题】:Ant zipfileset for each element in a filelist文件列表中每个元素的 Ant zipfileset
【发布时间】:2014-01-17 03:57:07
【问题描述】:

使用 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 文件中排除文件。

【问题讨论】:

    标签: java ant jar


    【解决方案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 秒。

    【讨论】:

    • restrict/archive/zips 太慢了,甚至都不好笑。
    猜你喜欢
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 2022-07-25
    • 2019-01-24
    • 2023-03-19
    • 2014-06-09
    相关资源
    最近更新 更多