带有zipfileset的ant文件中的错误JAR包装

时间:2012-06-04 22:42:38

标签: java ant jar

我在用于构建Java应用程序的ANT文件中遇到了一个奇怪的问题。生成jar文件时,最终我使用zipfileset在JAR中包含资源文件(图像,字体和配置文件),如下所示:

                    <zipfileset dir="src/res" prefix="res"/>
                <zipfileset dir="src/res/images" prefix="res/images" />
                <zipfileset dir="src/res/images/Bubbles" prefix="res/images/Bubbles"/>
                <zipfileset dir="src/res/images/Clocks" prefix="res/images/Clocks"/>
                <zipfileset dir="src/config" prefix="res/config"/>
                <zipfileset dir="src/ontology" prefix="res/ontology"/>

保留原始结构,如下所示:

res
 |-images
 |   |-Bubbles
 |   |-Clocks
 |-fonts
 |-config
 |-ontology

所以在JAR中复制,我在zipfileset中使用了prefix参数。问题是,我在任何res / images / Bubbles和res / images / Clocks文件夹中获得res / images和三幅图像(同一图像的3个副本)中的重复图像,另一方面,分别是2和3个深度级别。 res / config和res / ontology是正确的,那里没有重复的文件...截图,看看我的意思:

enter image description here

我忘了提,但很明显,每个文件夹中只有一个每个图像的实例。是什么原因导致了这种行为?

此致 亚历

2 个答案:

答案 0 :(得分:3)

ant实际上正是你所说的。你告诉他:

  • src/res下的所有文件打包并将其映射到res
  • src/res/images下的所有文件打包并将其映射到res/images
  • src/res/images/Bubbles下的所有文件打包到res/images/Bubbles

现在让我们假设您有src/res/images/Bubbles/activity_bubble_orange.png个文件。该文件包含在第一个zipfileset,第二个zipfileset和第三个zipfileset中。它将被包装三次。

要执行您想要的操作,您需要执行单个<zipfileset dir="src/res" prefix="res" />,但使用包含/排除过滤器过滤内容。

请参阅此处:http://ant.apache.org/manual/Types/zipfileset.html,它表示这是一种文件集。在这里:http://ant.apache.org/manual/Types/fileset.html以查看您如何指定包含/排除文件集的过滤器。

答案 1 :(得分:1)

您可以使用以下属性来包含整个路径,而无需对每个子目录进行硬编码。

包括=&#34; * / *&#34;

<zipfileset src="examples.zip" includes="**/*.html" prefix="docs/examples"/>

在上面的示例中,我以递归方式包含* .html。

Sukhbir Dhillon Addteq