我正在创建一些可运行的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?
这只是一个小小的烦恼,因为一切都与警告一起工作,但令我烦恼的是,我有一种感觉的东西应该是简单的,这是在逃避我。
答案 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;。