Я хочу создать файл WAR (а затем развернуть его в Tomcat). Итак, в качестве упражнения я начал новый проект Spring Boot с использованием Gradle в IDEA IntelliJ. После этого я применил плагин в файле build.gradle, например, этот apply plugin: 'war' ,

Проблема в том, что когда я пытаюсь запустить gradle war в терминале, я не получаю файла войны! Единственное, что происходит, это то, что он сгенерирует \build с 3 подпаянками classes, resources и tmp, но в них нет WAR.

Что мне делать, чтобы получить файл WAR? Я смотрел это видео, но этот парень использует Maven и не делает дополнительных хлам и получает войну. Я думаю, должен быть способ сделать это простым.

Когда я бегу gradle war --info

Initialized native services in: C:\Users\...\.gradle\native The client 

...

Задача: compileJava UP-TO-DATE Разрешение глобального управления зависимостями для проекта 'deleteme' Исключение [org.apache.tomcat: tomcat-annotations-api] Исключение [] Пропуск задачи ': compileJava', так как она актуальна. : compileJava (Поток [исполнитель задачи для ':', 5, основной]) завершен. Заняло 0,753 сек. : processResources (Thread [рабочий рабочий для ':', 5, main]) запущен.

Задача: processResources UP-TO DATE Пропуск задачи ': processResources', поскольку она актуальна. : processResources (Thread [исполнитель задачи для ':', 5, main]) завершен. Заняло 0,003 сек. : classes (Thread [Task worker for ':', 5, main]) запущен.

Задача: классы АКТУАЛЬНО Пропускаем задачу «: классы», так как она не имеет действий. : classes (Thread [Рабочий процесс для ':', 5, main]) завершен. Заняло 0,0 сек. : war (Тема [Рабочий процесс для ':', 5, main]) запущен.

Задача: war SKIPPED Пропуск задачи ': war' только как задача Если задано false : war (Тема [Рабочий процесс для ':', 5, main]) завершена. Заняло 0,0 сек.

10
MTZ 13 Сен 2018 в 16:23

2 ответа

Лучший ответ

Я предполагаю, что вы применили к своему проекту плагин spring boot gradle в дополнение к плагину war? тогда такое поведение является нормальным, поскольку плагин Spring Boot отключает задачи jar и war и заменяет их на bootWar и bootJar задачи.

При использовании плагинов Spring Boot и War:

./gradlew war
15:35:09: Executing task 'war'...

> Task :compileJava UP-TO-DATE
> Task :processResources UP-TO-DATE
> Task :classes UP-TO-DATE
> Task :war SKIPPED

BUILD SUCCESSFUL in 0s
2 actionable tasks: 2 up-to-date
15:35:10: Task execution finished 'war'.

Обратите внимание на сообщение ПРОПУЩЕНО .

$ ./gradlew bootWar
15:36:35: Executing task 'bootWar'...

> Task :compileJava UP-TO-DATE
> Task :processResources UP-TO-DATE
> Task :classes UP-TO-DATE
> Task :bootWar

BUILD SUCCESSFUL in 1s
3 actionable tasks: 1 executed, 2 up-to-date
15:36:37: Task execution finished 'bootWar'.

Затем вы получите ожидаемый файл war в папке build / libs .

Вы по-прежнему можете повторно включить стандартные задачи jar / war, как описано здесь: https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/html/#packaging-executable-wars-deployable (если нужно создавать обычные архивы, а не исполняемые архивы)

Что касается проблемы с Tomcat: установите Tomcat 8.5.

8
MTZ 14 Сен 2018 в 09:58

Как справедливо сказал @ M.Ricciuti, плагин spring boot gradle отключит задачи jar/war и будет работать только с задачами bootJar/bootWar. Но если вы по-прежнему хотите, чтобы ваш проект был упакован с задачами jar/war, просто добавьте приведенное ниже в свой файл build.gradle

war {
    enabled=true
}

Это позволит команде gradle war вызвать войну за ваш проект.

2
Madhu Bhat 13 Сен 2018 в 13:41