第26章 War プラグイン

The War plugin extends the Java plugin to add support for assembling web application WAR files. It disables the default JAR archive generation of the Java plugin and adds a default WAR archive task.

War プラグインは WEB アプリケーションの WAR ファイルを生成できるように Java プラグインを拡張したものです。 Java プラグインの 標準の JAR ファイルは生成されなくなり、WAR アーカイブ タスクが追加されます。

26.1. 使用方法Usage

To use the War plugin, include the following in your build script:

War プラグインを使うためには、ビルドスクリプトに下記を含めます:

例26.1 Using the War plugin

build.gradle

apply plugin: 'war'

26.2. タスクTasks

The War plugin adds the following tasks to the project.

War プラグインは 次のタスクをプロジェクトに追加します。

表26.1 War プラグイン - タスクWar plugin - tasks

タスク名Task name 依存先Depends on Type 説明Description
war compile War WAR ファイルを生成します。Assembles the application WAR file.

The War plugin adds the following dependencies to tasks added by the Java plugin.

War プラグインは Java プラグインで追加されたタスクに対し、次の依存関係を追加します。

表26.2 War プラグイン - 追加されたタスクの依存関係War plugin - additional task dependencies

タスク名Task name依存先Depends on
assemble war

図26.1 War プラグイン - タスクWar plugin - tasks

War プラグイン - タスクWar plugin - tasks

26.3. プロジェクトレイアウトProject layout

表26.3 War プラグイン - プロジェクトレイアウトWar plugin - project layout

ディレクトリDirectory 意味Meaning
src/main/webapp WEB アプリケーションソースWeb application sources

26.4. 依存関係の管理Dependency management

The War plugin adds two dependency configurations named providedCompile and providedRuntime. Those two configurations have the same scope as the respective compile and runtime configurations, except that they are not added to the WAR archive. It is important to note that those provided configurations work transitively. Let's say you add commons-httpclient:commons-httpclient:3.0 to any of the provided configurations. This dependency has a dependency on commons-codec. Because this is a “provided” configuration, this means that neither of these dependencies will be added to your WAR, even if the commons-codec library is an explicit dependency of your compile configuration. If you don't want this transitive behavior, simply declare your provided dependencies like commons-httpclient:commons-httpclient:3.0@jar.

War プラグインは providedCompileprovidedRuntime の2つの依存構成を追加します。 これらの構成は WAR アーカイブには追加されないという点を除けば、それぞれ compileruntime と同じスコープを持ちます。 provided 構成が推移的に機能することは特筆すべき点です。 そうですね。例えば provided 構成の何れかに commons-httpclient:commons-httpclient:3.0 を追加したとします。 この依存ライブラリは commons-codec に依存します。 これは、たとえ、commons-codeccompile 構成に依存していることが明らかであったとしても WAR ファイルには httpclientcommons-codec も追加されないことを意味します。 もし、この推移的な挙動を望まないのであれば、単純に commons-httpclient:commons-httpclient:3.0@jar を dependencies の provided 構成に定義してください。

26.5. 規約プロパティConvention properties

表26.4 War プラグイン - ディレクトリプロパティWar plugin - directory properties

プロパティ名Property name Type デフォルト値Default value 説明Description
webAppDirName String src/main/webapp WEB アプリケーションソースディレクトリの名前、プロジェクトディレクトリからの相対パス The name of the web application source directory, relative to the project directory.
webAppDir File (読取専用)(read-only) projectDir/webAppDirName WEB アプリケーションソースディレクトリ The web application source directory.

>These properties are provided by a WarPluginConvention convention object.

これらのプロパティは WarPluginConvention オブジェクトによって提供されています。

26.6. War

>The default behavior of the War task is to copy the content of src/main/webapp to the root of the archive. Your webapp directory may of course contain a WEB-INF sub-directory, which may contain a web.xml file. Your compiled classes are compiled to WEB-INF/classes. All the dependencies of the runtime [21] configuration are copied to WEB-INF/lib.

The War class in the API documentation has additional useful information.

26.7. カスタマイズCustomizing

Here is an example with the most important customization options:

以下は最も重要なカスタマイズ例です。

例26.2 Customization of war plugin

build.gradle

configurations {
   moreLibs
}

repositories {
   flatDir { dirs "lib" }
   mavenCentral()
}

dependencies {
    compile module(":compile:1.0") {
        dependency ":compile-transitive-1.0@jar"
        dependency ":providedCompile-transitive:1.0@jar"
    }
    providedCompile "javax.servlet:servlet-api:2.5"
    providedCompile module(":providedCompile:1.0") {
        dependency ":providedCompile-transitive:1.0@jar"
    }
    runtime ":runtime:1.0"
    providedRuntime ":providedRuntime:1.0@jar"
    testCompile "junit:junit:4.11"
    moreLibs ":otherLib:1.0"
}

war {
    from 'src/rootContent' // adds a file-set to the root of the archive
    webInf { from 'src/additionalWebInf' } // adds a file-set to the WEB-INF dir.
    classpath fileTree('additionalLibs') // adds a file-set to the WEB-INF/lib dir.
    classpath configurations.moreLibs // adds a configuration to the WEB-INF/lib dir.
    webXml = file('src/someWeb.xml') // copies a file to WEB-INF/web.xml
}

Of course one can configure the different file-sets with a closure to define excludes and includes.

もちろん、excludes と includes を定義したクロージャを使って異なるファイルセットを設定することもできます。



[21] The runtime configuration extends the compile configuration.