Глава 50. Плагин War.

Плагин War расширяет плагин Java, добавляя поддержку объединения war-файлов вэб-приложения. Он отключает генерацию архива jar по умолчанию плагина Java и добавляет задачу архивирования war по умолчанию.

50.1. Использование.

Для использования плагина War, включите следующую строку в ваш сборочный скрипт:

Пример 50.1. Использование плагина War

build.gradle

apply plugin: 'war'
	  

50.2. Задачи.

Плагин War добавляет следующие задачи к проекту.

Таблица 50.1. Плагин War - задачи
Имя задачиЗависит отТипОписание
warcompileWarСобирает war-файл приложения.

Плагин War добавляет следующие зависимости к задачам, добавленным плагином Java.

Таблица 50.2. Плагин War - дополнительные зависимости задач
Имя задачиЗависит от
assemblewar
Рисунок 50.1. Плагин War - задачи
Плагин War - задачи

50.3. Разметка проекта.

Таблица 50.3. Плагин War - разметка проекта
ПапкаЗначение
src/main/webappИсходники вэб-приложения

50.4. Управление зависимостями.

Плагин War добавляет две конфигурации зависимостей с именами providedCompile и providedRuntime. Эти две конфигурации имеют те же границы, что и соответствующие конфигурации compile и runtime, за исключением того, что они не добавляются в архив War. Важно обратить внимание, что эти конфигурации работают переходяще. Допустим, вы добавляете commons-httpclient:commons-httpclient:3.0 к любой из конфигураций. У этой зависимости есть зависимость от commons-codec. Так как это 'предоставленная' конфигурация, это означает, что ни одна из этих зависимостей не будет добавлена в ваш war-файл, даже если библиотека commons-codec явная зависимость конфигурации compile. Если вам не нужно такое переходящее поведение, просто объявите ваши 'предоставленные' зависимости вот так commons-httpclient:commons-httpclient:3.0@jar.

50.5. Условные свойства.

Таблица 50.4. Плагин War - свойства папок
Имя свойстваТипЗначение по умолчаниюОписание
webAppDirNameStringsrc/main/webappИмя папки исходников вэб-приложения, относительно папки проекта.
webAppDirFile (только для чтения)projectDir/webAppDirNameПапка исходников вэб-приложения.

Эти свойства предоставляются условным объектом WarPluginConvention.

50.6. War.

Поведение по умолчанию задачи War - скопировать содержимое src/main/webapp в корень архива. Ваша папка webapp, конечно, может содержать подпапку WEB-INF, в которой может лежать файл web.xml. Ваши классы компилируются в WEB-INF/classes. Все зависимости конфигурации runtime копируются в WEB-INF/lib.

В документации API к классу War есть дополнительная полезная информация.

50.7. Настройка.

Ниже пример с наиболее важными опциями настройки:

Пример 50.2. Настройка плагина War

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.12"
    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
}
	  

Само собой, кто-то может настроить различные наборы файлов с замыканием, задающим исключения и включения.