War

描述

Jar 任务的扩展,对最终将出现在 Web 应用程序存档的 WEB-INF/libWEB-INF/classesWEB-INF 目录中的文件进行特殊处理。

War 任务是指定 WAR 文件特定布局的快捷方式。使用 ZipJar 任务中 zipfilesetprefixfullpath 属性也可以实现相同的效果。)

zip 任务中扩展的 zipfileset 元素(具有属性 prefixfullpathsrc)在 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)。 是,除非 needxmlfiletrue,否则该文件将通过嵌套文件集拉入,或者正在更新现有的 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 必须排除的文件模式的逗号或空格分隔列表。 否;默认值为默认排除项,如果 defaultexcludesno,则为无
excludesfile 文件名称。此文件的每一行都被视为一个排除模式
defaultexcludes 指示是否使用默认排除项 (yes|no)。 否;默认值为 yes
manifest 要使用的清单文件。
filesetmanifest zipfilesetzipgroupfileset 文件中找到清单时的行为。有效值为 skipmergemergewithoutmainmerge 将合并所有清单,并将此合并到任何其他指定的清单中。 mergewithoutmain 合并所有内容,但清单的主部分除外。 否;默认值为 skip
whenmanifestonly 当没有文件匹配时的行为。有效值为 failskipcreate 否;默认值为 create
update 指示如果目标文件已存在,是更新还是覆盖它。 否;默认值为 false
duplicate 找到重复文件时的行为。有效值为 addpreservefail 否;默认值为 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 扩展字段以在条目元数据中第二次存储文件名。
可能的值为 neveralwaysnot-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 扩展。可能的值为 neveralwaysas-needed自 Ant 1.9.1 起
另请参阅 zip 任务页面中的讨论
否;默认值为 never
modificationtime 将所有存储的文件修改时间设置为给定时间。这可以是解释为自 1970-01-01T00:00:00Z 以来以毫秒为单位的数字,也可以是可解析为具有可选时区的 ISO 8601 时间戳的字符串。自 Ant 1.10.2 起

作为嵌套元素指定的参数

lib

嵌套的 lib 元素指定一个 文件集。此文件集中包含的所有文件最终将出现在 war 文件的 WEB-INF/lib 目录中。

classes

嵌套的 classes 元素指定一个 文件集。此文件集中包含的所有文件最终将出现在 war 文件的 WEB-INF/classes 目录中。

webinf

嵌套的 webinf 元素指定一个 文件集。此文件集中包含的所有文件最终将出现在 war 文件的 WEB-INF 目录中。如果此文件集包含名为 web.xml 的文件,则该文件将被忽略,您将收到警告。

metainf

嵌套的 metainf 元素指定一个 文件集。此文件集中包含的所有文件最终将出现在 war 文件的 META-INF 目录中。如果此文件集包含名为 MANIFEST.MF 的文件,则该文件将被忽略,您将收到警告。

manifest、indexjars、service

这些继承自 <jar>

示例

假设项目基本目录中的结构如下

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 具有一个允许所有大写名称的选项(默认情况下处于关闭状态!)。可以通过以下方式启用它:菜单 选项配置查看 属性/选项卡页面,然后 常规 组框中有一个名为 允许所有大写文件名 的选项。