Создайте несколько файлов .WAR с различными зависимостями в Gradle

Я использую военный плагин для создания простого .WAR файла для моего проекта в gradle. Я хотел бы знать, как настроить gradle, чтобы я мог создавать 4 разных файла .WAR с различными зависимостями.

Я настроил конфигурацию компиляции зависимостей с банками, которые необходимы для перехода в дистрибутив. Ни один из кода в src не зависит от пары этих банок, но я хотел бы знать, как настроить проект для создания

  • стандартный файл .WAR, содержащий все банки в графе зависимостей (даже если они не используются - это нормально - я что-то тестирую)
  • другой файл standard-qas-only.WAR, содержащий только qas.jar
  • другой файл standard-qas-log4j.WAR, содержащий qas.jar и log4j

Какие задачи я настраиваю, чтобы генерация артефакта использовала конкретную конфигурацию зависимостей?

FYI: Единственная банка, которая требуется для компиляции, - qas.jar в этом случае.

Мой пример ниже создает военный файл, который включает только одну банку, но я хотел бы иметь 5 разных файлов .war, сгенерированных с разными банками.

build.gradle

apply plugin: 'java'
apply plugin: 'war'

dependencies {
    compile files('/lib/qas.jar','/lib/axis1-1.4.jar','/lib/axis2-kernel-1.3.jar','/lib/dom4j-1.6.1.jar','/lib/log4j-1.2.14.jar')
    providedCompile files('/lib/j2ee-1.4.03.jar')
}

war {
    classpath = ['/lib/qas.jar']
}

task dist(dependsOn: 'war') << {
    copy {
        from war.archivePath
        into "dist/"
    }
}

Ответ 1

Я немного смутился о том, сколько виртуальных дистрибутивов вы на самом деле пытаетесь построить. Вы можете легко изменить его, чтобы создать дополнительные WAR файлы. Вот один из способов сделать это:

task createStandardWar(type: War, dependsOn: classes) {
    baseName = 'standard'
    destinationDir = file("$buildDir/dist")
}

task createStandardWarQasOnly(type: War, dependsOn: classes) {
    baseName = 'standard-qas-only'
    destinationDir = file("$buildDir/dist")
    classpath = war.classpath.minus(files('/lib/axis1-1.4.jar','/lib/axis2-kernel-1.3.jar','/lib/dom4j-1.6.1.jar','/lib/log4j-1.2.14.jar'))
}

task createStandardWarQasAndLog4J(type: War, dependsOn: classes) {
    baseName = 'standard-qas-log4j'
    destinationDir = file("$buildDir/dist")
    classpath = war.classpath.minus(files('/lib/axis1-1.4.jar','/lib/axis2-kernel-1.3.jar','/lib/dom4j-1.6.1.jar'))
}

task createDists(dependsOn: [createStandardWar, createStandardWarQasOnly, createStandardWarQasAndLog4J])

Этот сборник script создает три разных файла WAR, объявляя расширенные задачи типа War. Он предполагает, что вы все еще хотите иметь скомпилированные исходные файлы в WEB-INF/classes в файлах WAR, поэтому я не удалял его из пути к классам. Распределения заканчиваются в каталоге build/dist. Задача createDists создает все из них.