War

説明

Jar タスクの拡張で、Web アプリケーションアーカイブのWEB-INF/libWEB-INF/classes、またはWEB-INF ディレクトリに配置する必要があるファイルに対して特別な処理を行います。

(War タスクは、WAR ファイルの特定のレイアウトを指定するためのショートカットです。ZipまたはJarタスクのzipfilesetprefix属性とfullpath属性を使用しても同じ結果を得ることができます。)

zipタスクからの拡張されたzipfileset要素(prefixfullpathsrc属性付き)は、Warタスクで使用できます。このタスクはリソースも有効にしており、ネストされたリソースとリソースコレクションをアーカイブに追加します。

Servlet API 2.5/Java EE 5 より前では、WEB-INF/web.xml ファイルは WAR ファイルに必須だったため、webxml 属性が欠けている場合、このタスクは失敗しました。web.xmlファイルは現在オプションになったため、webxml属性もオプションにできます。ただし、ほとんどの実Webアプリケーションではweb.xmlファイルが必要なため、デフォルトではオプションではありません。 needxmlfile 属性が false に設定されていない限り、ファイルが含まれていない場合、タスクは失敗します。 filesetを介して複数のweb.xmlファイルがJARに追加された場合、タスクは警告します。

Zip形式では、同じ完全修飾名を持つ複数のファイルが単一のアーカイブ内に存在することが可能です。これは、予期せぬユーザーに様々な問題を引き起こすことが文書化されています。この動作を回避する場合は、duplicate属性をデフォルトのadd以外の値に設定する必要があります。

パラメータ

属性 説明 必須
destfile 作成するWARファイル。 次の2つのいずれか1つ
warfile 非推奨 作成するファイルの名前 - 代わりにdestfileを使用してください。
webxml 使用するサーブレット設定記述子 (WEB-INF/web.xml)。 はい、needxmlfiletrueでない限り、ファイルはネストされたfilesetを介して取り込まれるか、既存のWARファイルが更新されます。
needxmlfile web.xmlファイルが必要かどうかを示すフラグ。web.xmlファイルがないServlet 2.5以降のWARファイル生成時にはfalseに設定する必要があります。Apache Ant 1.7以降 いいえ。デフォルトはtrue
basedir ファイルをjarするディレクトリ。 いいえ
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 zipfilesetまたはzipgroupfilesetファイル内でマニフェストが見つかった場合の動作。有効な値はskipmerge、およびmergewithoutmainです。mergeはすべてマニフェストをマージし、これを他の指定されたマニフェストにマージします。mergewithoutmainは、マニフェストのMainセクションを除くすべてをマージします。 いいえ。デフォルトはskip
whenmanifestonly ファイルが一致しない場合の動作。有効な値はfailskip、およびcreateです。 いいえ。デフォルトはcreate
update 宛先ファイルが既に存在する場合に、更新するか上書きするかを示します。 いいえ。デフォルトはfalse
duplicate 重複ファイルが見つかった場合の動作。有効な値はaddpreserve、および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追加フィールドを作成して、ファイル名をエントリのメタデータ内に2回目に保存するかどうか。
可能な値はneveralways、および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以降
flattenAttributestrueに設定しない限り、マニフェスト仕様に違反する複数のClass-Path属性を含むマニフェストになる可能性があります。
いいえ。デフォルトはfalse
flattenAttributes セクションで複数回発生する属性(これはClass-Path属性の場合にのみ発生する可能性があります)を単一の属性にマージするかどうか。Ant 1.8.0以降 いいえ。デフォルトはfalse
zip64Mode エントリにZip64拡張機能を使用する場合。可能な値はneveralways、およびas-neededです。Ant 1.9.1以降
zipタスクページの解説も参照してください。
いいえ。デフォルトはnever
modificationtime 保存されたすべてのファイルの変更時刻を指定された時刻に設定します。これは、1970年1月1日00:00:00Zからのミリ秒数として解釈される数値、またはオプションのタイムゾーンを含むISO 8601タイムスタンプとして解析できる文字列のいずれかです。Ant 1.10.2以降 いいえ

ネストされた要素として指定されたパラメータ

lib

ネストされたlib要素はFileSetを指定します。このfilesetに含まれるすべてのファイルは、warファイルのWEB-INF/libディレクトリに配置されます。

classes

ネストされたclasses要素はFileSetを指定します。このfilesetに含まれるすべてのファイルは、warファイルのWEB-INF/classesディレクトリに配置されます。

webinf

ネストされたwebinf要素はFileSetを指定します。このfilesetに含まれるすべてのファイルは、warファイルのWEB-INFディレクトリに配置されます。このfilesetにweb.xmlという名前のファイルが含まれている場合、そのファイルは無視され、警告が表示されます。

metainf

ネストされたmetainf要素はFileSetを指定します。このfilesetに含まれるすべてのファイルは、warファイルのMETA-INFディレクトリに配置されます。このfilesetに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

その後、次のように作成されたmyapp.war 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にあり、WinZipはすべて大文字のディレクトリを親切心からすべて小文字に変換します。別のレポートを提出する前に、jar xvf yourwebapp.warが同じ動作を示すことを確認してください。
WinZipには、すべて大文字の名前を許可するオプションがあります(デフォルトではオフになっています!)。これは、メニューオプション構成表示プロパティ/タブページで有効にできます。次に、全般グループボックスにすべて大文字のファイル名を許可するというオプションがあります。