我在用于构建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是正确的,那里没有重复的文件...截图,看看我的意思:
我忘了提,但很明显,每个文件夹中只有一个每个图像的实例。是什么原因导致了这种行为?
此致 亚历
答案 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