我想构建一个WAR文件(然后将其部署到Tomcat)。因此,作为练习,我在IDEA IntelliJ中使用Gradle启动了一个新的Spring Boot项目。然后,将插件插入build.gradle
文件中,例如apply plugin: 'war'
。
问题是,当我尝试在终端中运行gradle war
时,没有收到war文件!唯一发生的是它将生成一个带有三个子焊料\build
,classes
和resources
的{{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秒。
答案 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 进行调试