ANT / ProGuard:在使用 zipgroupfileset 打包之前从*within* 3rd 方 JAR 中删除文件

ANT / ProGuard: Removing files from *within* 3rd party JAR before packing using zipgroupfileset

我正在创建一些运行可用的 JAR(桌面 JavaFX 应用程序)。

我有一个包含第 3 方 JAR 的文件集:

<fileset id="shared_lib" dir="${aux.debian.lib.dir}">
    <include name="commons-lang3-3.4.jar"/>
    <include name="commons-io-2.4.jar"/>
    ...
</fileset>

然后我使用 zipgroupfileset 将它们包含在最终的 运行nable JAR 中:

<jar destfile="myapp.jar" filesetmanifest="mergewithoutmain">
    <zipgroupfileset refid="shared_lib"/>
    <manifest>
        <attribute name="Main-Class" value="mypackage.myapp"/>
        <attribute name="Class-Path" value="."/>
    </manifest>
    <fileset dir="./classes" />
</jar>

当我然后 运行 ProGuard 我多次收到以下警告(因为每个压缩的 JAR 包含 LICENSE.txt 和 NOTICE.txt):

[proguard] Warning: can't write resource [META-INF/LICENSE.txt] (Duplicate zip entry [myapp.jar:META-INF/LICENSE.txt])
[proguard] Warning: can't write resource [META-INF/NOTICE.txt] (Duplicate zip entry [myapp.jar:META-INF/NOTICE.txt])

我在定义文件集时尝试了各种排除选项,但它们只从文件集中排除文件,而不是从包含的 JAR 中排除文件。

是否可以简单地过滤作为 zipgroup 文件集的一部分压缩的内容?也许在 ProGuard 中?

这只是一个小麻烦,因为一切都与警告一起工作,但令我恼火的是,我感觉应该很简单的东西却没有出现。

您可以将 duplicate="preserve" 添加到 <jar> 元素,如 the documentation:

中所述

duplicate

  • behavior when a duplicate file is found. Valid values are "add", "preserve", and "fail". The default value is "add".