1

我在用于构建 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 中使用前缀参数。问题是我在任何 res/images/Bubbles 和 res/images/Clocks 文件夹中的 res/images 和三重图像(同一图像的 3 个副本)中都得到了重复的图像,另一方面,它们是分别为 2 和 3 个深度级别。res/config 和 res/ontology 是正确的,那里没有重复的文件……截图看看我的意思:

在此处输入图像描述

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

问候,亚历克斯

4

2 回答 2

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查看如何为文件集指定包含/排除过滤器。

于 2012-06-04T22:58:21.090 回答
1

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

包括="* / .*"

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

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

Sukhbir Dhillon Addteq

于 2012-06-05T00:04:08.350 回答