如何使用Gradle构建WAR文件?

时间:2018-09-13 13:23:02

标签: gradle

我想构建一个WAR文件(然后将其部署到Tomcat)。因此,作为练习,我在IDEA IntelliJ中使用Gradle启动了一个新的Spring Boot项目。然后,将插件插入build.gradle文件中,例如apply plugin: 'war'

问题是,当我尝试在终端中运行gradle war时,没有收到war文件!唯一发生的是它将生成一个带有三个子焊料\buildclassesresources的{​​{1}},但是其中没有WAR。

我应该如何获取WAR文件?我看过this视频,但是这个人使用Maven,不做任何高级工作,反而会发动战争。我认为必须有一种简单的方法。

我运行tmp

gradle war --info
     

...

     

任务:compileJava更新日期   解决项目“删除”的全局依赖管理   不包括[org.apache.tomcat:tomcat-annotations-api]   不包括[]   正在跳过任务':compileJava',因为它是最新的。   :compileJava(Thread [',',5,main]的任务处理程序)已完成。花费了0.753秒。   :processResources(线程[用于':',5,main]的任务工作者)已启动。

     

任务:processResources截止日期   正在跳过任务':processResources',因为它是最新的。   :processResources(线程[',',5,main]的任务处理程序)已完成。花费了0.003秒。   :classes(线程[',',5,main]的任务处理程序)已启动。

     

任务:UP-TO-DATE分类   跳过任务':classes',因为它没有动作。   :classes(线程[',',5,main]的任务处理程序)已完成。花费了0.0秒   :war(Thread [',',5,main]的任务执行器)已启动。

     

任务:战争跳过   仅将任务':war'跳过作为任务如果为false。   :war(线程[',',5,main]的任务处理程序)已完成。花了0.0秒。

3 个答案:

答案 0 :(得分:3)

我想您除了war插件之外,还已经将spring boot gradle插件应用于了您的项目?那么这种行为是正常的,因为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'.

注意 SKIPPED 消息

$ ./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'.

然后您将在 build / libs 下获得预期的 war 文件。

您仍然可以按照以下说明重新启用标准的jar / war任务:https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/html/#packaging-executable-wars-deployable(如果您需要生成普通存档而不是可执行存档)

关于Tomcat问题:安装Tomcat 8.5。

答案 1 :(得分:1)

@ M.Ricciuti正确地说,spring boot gradle插件将禁用jar/war任务,并且仅适用于bootJar/bootWar任务。但是,如果您仍然希望将项目与jar/war打包在一起,只需将以下内容添加到build.gradle文件中

war {
    enabled=true
}

这将使gradle war命令能够为您的项目产生战争。

答案 2 :(得分:0)

请阅读:https://docs.gradle.org/current/userguide/war_plugin.html

如果在 IntelliJ 中使用 Gradle,请转到 build.gradle(或用于 Kotlin 的 build.gradle.kts)并添加

<块引用>

id '战争'

(或只是

<块引用>

战争

对于 Kotlin ) 在插件下

重新加载 Gradle 项目,然后在 Intellij 终端上使用 gradlew bootWar。

添加 --info 或 --stackTrace 进行调试