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

时间:2017-10-03 10:32:22

标签: java jar ant proguard

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

我有第三方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将它们包含在最终的runnable 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中排除。

是否可以简单地过滤zipullfileset中的压缩内容?也许在ProGuard?

这只是一个小小的烦恼,因为一切都与警告一起工作,但令我烦恼的是,我有一种感觉的东西应该是简单的,这是在逃避我。

1 个答案:

答案 0 :(得分:1)

您可以将 const string INPUT_FILENAME = @"c:\temp\test.xml"; const string OUTPUT_FILENAME = @"c:\temp\test1.xml"; static void Main(string[] args) { XmlReader reader = XmlReader.Create(INPUT_FILENAME ); XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; XmlWriter writer = XmlWriter.Create(OUTPUT_FILENAME, settings); writer.WriteStartElement("root"); while (reader.Read()) { writer.WriteRaw(reader.ReadOuterXml()); } writer.WriteEndElement(); writer.Flush(); writer.Close(); } 添加到duplicate="preserve"元素,如the documentation中所述:

  

复制

     
      
  • 找到重复文件时的行为。有效值为&#34;添加&#34;,&#34;保留&#34;和&#34;失败&#34;。默认值为&#34;添加&#34;。
  •