我刚把我的Grails网站应用程序从3.2版升级到4.0版。
我在provided中有一个build.gradle依赖项(相当常见的配置):
dependencies {
...
compile "org.springframework.boot:spring-boot-starter-logging"
compile "org.springframework.boot:spring-boot-autoconfigure"
compile "org.springframework.boot:spring-boot-starter-actuator"
provided "org.springframework.boot:spring-boot-starter-tomcat"
...
}我刚刚注意到,通过执行Gradle assemble任务,我不再获得myApp.war.original归档文件(以前构建时没有所有提供的libs),而只有包含所提供的依赖项的文件。
我是不是漏掉了什么?我真的很想把那些~4MB的罐子放在lib-provided文件夹里。提前感谢!
更新1
按照@ck1的建议,我将provided依赖项更改为providedCompile,但结果是相同的。虽然我已经使用了war插件,但我注意到由assemble任务启动的任务顺序是:
> Task :assetCompile
Finished Precompiling Assets
> Task :compileJava
> Task :compileGroovy
> Task :buildProperties
> Task :processResources
> Task :classes
> Task :compileWebappGroovyPages NO-SOURCE
> Task :compileGroovyPages
> Task :compileGsonViews
> Task :findMainClass
> Task :bootWar
> Task :war SKIPPED
> Task :assemble因此,war任务被跳过以支持新的bootWar任务(在Gradle 3中不可用,Grails 3使用)。有什么办法强迫它吗?或者是插件应该支持的东西?
更新2
经过一些研究,我加入了build.gradle
war {
enabled = true
}并且能够让war任务执行:
> Task :assetCompile
Finished Precompiling Assets
> Task :compileJava
> Task :compileGroovy
> Task :buildProperties
> Task :processResources
> Task :classes
> Task :compileWebappGroovyPages NO-SOURCE
> Task :compileGroovyPages
> Task :compileGsonViews
> Task :findMainClass
> Task :bootWar
> Task :war // not skipped
> Task :assemble我基本上达到了我想要的地方,即在没有所有提供的依赖项的情况下获得一个.war存档;但是,与以前不同的是,不是一对.war存档(myApp.war和myApp.war.original),而是一个名为myApp.war的单独存档,它不包括不需要的东西。
但是我仍然很困惑,因为Spring Boot的Gradle插件文档声明bootWar是war的一个扩展。
用于构建可执行jars和wars的bootRepackage任务已分别替换为bootJar和bootWar任务。这两个任务都扩展了它们等效的标准Gradle jar或war任务,允许您访问所有常见的配置选项和行为。
但是,SpringBoot2.0迁移指南状态war任务将被跳过:
用于构建可执行jars和wars的bootRepackage任务已分别替换为bootJar和bootWar任务。jar和战争任务不再涉及。
所以再说一遍,我错过了什么?
发布于 2019-12-13 14:49:41
您应该将provided替换为来自war插件的providedCompile或providedRuntime依赖项配置。
这两种配置与各自的编译和运行时配置具有相同的范围,只不过它们没有添加到WAR存档中。
参考:
https://stackoverflow.com/questions/59323898
复制相似问题