对 Jar 任务的扩展,对最终将出现在 Web 应用程序存档的 WEB-INF/lib、WEB-INF/classes 或 WEB-INF 目录中的文件进行特殊处理。
(War
任务是指定 WAR 文件特定布局的快捷方式。使用 Zip
或 Jar
任务中 zipfileset
的 prefix 和 fullpath 属性也可以实现相同的效果。)
zip
任务中扩展的 zipfileset
元素(具有属性 prefix、fullpath 和 src)在 War
任务中可用。该任务也支持资源,并将把嵌套资源和资源集合添加到存档中。
在 Servlet API 2.5/Java EE 5 之前,WAR 文件中必须包含 WEB-INF/web.xml 文件,因此如果缺少 webxml 属性,此任务将失败。由于 web.xml 文件现在是可选的,因此 webxml 属性现在也可以是可选的。但是,由于大多数实际的 Web 应用程序都需要 web.xml 文件,因此它默认情况下不是可选的。如果未包含该文件,该任务将失败,除非将 needxmlfile 属性设置为 false
。如果通过文件集向 JAR 添加了多个 web.xml 文件,该任务将发出警告。
请注意,Zip 格式允许在单个存档中存在多个具有相同完全限定名称的文件。这已被记录为会导致对毫无戒心的用户造成各种问题。如果您希望避免这种行为,则必须将 duplicate 属性设置为除其默认值 add
之外的值。
属性 | 描述 | 必需 |
---|---|---|
destfile | 要创建的 WAR 文件。 | 以下两者之一 |
warfile | 已弃用 要创建的文件的名称 - 请改用 destfile。 | |
webxml | 要使用的 Servlet 配置描述符 (WEB-INF/web.xml)。 | 是,除非 needxmlfile 为 true,否则该文件将通过嵌套文件集拉入,或者正在更新现有的 WAR 文件。 |
needxmlfile | 标志,指示是否需要 web.xml 文件。在生成没有 web.xml 文件的 Servlet 2.5+ WAR 文件时,应将其设置为 false。自 Apache Ant 1.7 起 |
否;默认值为 true |
basedir | 要从中打包文件的目录。 | 否 |
compress | 不仅存储数据,还要压缩它们。除非将 keepcompression 属性设置为 false,否则这将应用于整个存档,而不仅仅是您在更新时添加的文件。 |
否;默认值为 true |
keepcompression | 对于来自现有存档的条目(如嵌套的 zipfileset 或更新存档时),请保留其原始压缩方式,而不是使用 compress 属性。自 Ant 1.6 起 | 否;默认值为 false |
encoding | 用于存档中文件名字符编码。不建议更改此值,因为否则创建的存档很可能无法被 Java 读取。 另请参阅 zip 任务页面中的讨论 |
否;默认值为 UTF8 |
filesonly | 仅存储文件条目 | 否;默认值为 false |
includes | 必须包含的文件模式的逗号或空格分隔列表。 | 否;默认值为全部 (**) |
includesfile | 文件名称。此文件的每一行都被视为一个包含模式 | 否 |
excludes | 必须排除的文件模式的逗号或空格分隔列表。 | 否;默认值为默认排除项,如果 defaultexcludes 为 no,则为无 |
excludesfile | 文件名称。此文件的每一行都被视为一个排除模式 | 否 |
defaultexcludes | 指示是否使用默认排除项 (yes|no)。 |
否;默认值为 yes |
manifest | 要使用的清单文件。 | 否 |
filesetmanifest | 在 zipfileset 或 zipgroupfileset 文件中找到清单时的行为。有效值为 skip、 merge和 mergewithoutmain。 merge将合并所有清单,并将此合并到任何其他指定的清单中。 mergewithoutmain合并所有内容,但清单的主部分除外。 |
否;默认值为 skip |
whenmanifestonly | 当没有文件匹配时的行为。有效值为 fail、 skip和 create。 |
否;默认值为 create |
update | 指示如果目标文件已存在,是更新还是覆盖它。 | 否;默认值为 false |
duplicate | 找到重复文件时的行为。有效值为 add、 preserve和 fail。 |
否;默认值为 add |
roundup | 文件修改时间是否将四舍五入到下一个偶数秒。 Zip 存档以 2 秒的粒度存储文件修改时间,因此时间将四舍五入。如果您四舍五入,则在重新运行任务时,存档将始终显示为过时,因此默认情况下是四舍五入。四舍五入可能会导致其他类型的问题,例如 Web 存档中的 JSP 似乎比预编译页面略微更新,从而使预编译毫无用处。自 Ant 1.6.2 起 |
否;默认值为 true |
level | 执行文件压缩的非默认级别。有效值范围从 0(无压缩/最快)到 9(最大压缩/最慢)。自 Ant 1.7 起 |
否 |
preserve0permissions | 更新存档或从其他存档添加条目时,Ant 将假设 Unix 权限值为 0(没有人被允许对文件/目录执行任何操作)意味着权限根本没有存储,而不是实际权限,并将改为应用其自己的默认值。 如果您确实要保留原始权限字段,请将此属性设置为 true。自 Ant 1.8.0 起 |
否;默认值为 false |
useLanguageEncodingFlag | 如果编码为 UTF-8,是否设置语言编码标志。如果编码不是 UTF-8,此设置没有任何效果。自 Ant 1.8.0 起。 另请参阅 zip 任务页面中的讨论 |
否;默认值为 true |
createUnicodeExtraFields | 是否创建 Unicode 扩展字段以在条目元数据中第二次存储文件名。 可能的值为 never、 always和 not-encodeable,如果文件名无法使用指定的编码进行编码,则仅添加 Unicode 扩展字段。自 Ant 1.8.0 起。 另请参阅 zip 任务页面中的讨论 |
否;默认值为 never |
fallbacktoUTF8 | 如果文件名无法使用指定的编码进行编码,是否使用 UTF-8 和语言编码标志而不是指定的编码。自 Ant 1.8.0 起。 另请参阅 zip 任务页面中的讨论 |
否;默认值为 false |
mergeClassPathAttributes | 是否合并不同清单(如果合并清单)中找到的 Class-Path 属性。如果为 false,则仅保留最后一个合并清单的属性。自 Ant 1.8.0 起。 除非您还将 flattenAttributes 设置为 true,否则这可能会导致清单包含多个 Class-Path 属性,这违反了清单规范。 |
否;默认值为 false |
flattenAttributes | 是否将一个部分中多次出现的属性(这只能发生在 Class-Path 属性中)合并到单个属性中。自 Ant 1.8.0 起。 |
否;默认值为 false |
zip64Mode | 何时对条目使用 Zip64 扩展。可能的值为 never、 always和 as-needed。自 Ant 1.9.1 起。 另请参阅 zip 任务页面中的讨论 |
否;默认值为 never |
modificationtime | 将所有存储的文件修改时间设置为给定时间。这可以是解释为自 1970-01-01T00:00:00Z 以来以毫秒为单位的数字,也可以是可解析为具有可选时区的 ISO 8601 时间戳的字符串。自 Ant 1.10.2 起。 | 否 |
嵌套的 lib
元素指定一个 文件集。此文件集中包含的所有文件最终将出现在 war 文件的 WEB-INF/lib 目录中。
嵌套的 classes
元素指定一个 文件集。此文件集中包含的所有文件最终将出现在 war 文件的 WEB-INF/classes 目录中。
嵌套的 webinf
元素指定一个 文件集。此文件集中包含的所有文件最终将出现在 war 文件的 WEB-INF 目录中。如果此文件集包含名为 web.xml 的文件,则该文件将被忽略,您将收到警告。
嵌套的 metainf
元素指定一个 文件集。此文件集中包含的所有文件最终将出现在 war 文件的 META-INF 目录中。如果此文件集包含名为 MANIFEST.MF 的文件,则该文件将被忽略,您将收到警告。
假设项目基本目录中的结构如下
thirdparty/libs/jdbc1.jar thirdparty/libs/jdbc2.jar build/main/com/myco/myapp/Servlet.class src/metadata/myapp.xml src/html/myapp/index.html src/jsp/myapp/front.jsp src/graphics/images/gifs/small/logo.gif src/graphics/images/gifs/large/logo.gif
然后使用以下命令创建的 war 文件 myapp.war
<war destfile="myapp.war" webxml="src/metadata/myapp.xml"> <fileset dir="src/html/myapp"/> <fileset dir="src/jsp/myapp"/> <lib dir="thirdparty/libs"> <exclude name="jdbc1.jar"/> </lib> <classes dir="build/main"/> <zipfileset dir="src/graphics/images/gifs" prefix="images"/> </war>
将包含
WEB-INF/web.xml WEB-INF/lib/jdbc2.jar WEB-INF/classes/com/myco/myapp/Servlet.class META-INF/MANIFEST.MF index.html front.jsp images/small/logo.gif images/large/logo.gif使用 Ant 的默认清单文件。 WEB-INF/web.xml 的内容与 src/metadata/myapp.xml 相同。
我们经常收到错误报告,指出此任务正在创建 WEB-INF 目录为 web-inf(全部小写),因此这是我们的错误,导致您的 Web 应用程序无法正常工作。这些投诉的原因在于 WinZip,它出于帮助的目的,将所有大写目录转换为所有小写目录。在提交另一份报告之前,请检查 jar xvf yourwebapp.war
是否显示相同的行为。
WinZip 具有一个允许所有大写名称的选项(默认情况下处于关闭状态!)。可以通过以下方式启用它:菜单 选项
→ 配置
,查看
属性/选项卡页面,然后 常规
组框中有一个名为 允许所有大写文件名
的选项。