我刚刚将我的 Grails Web 应用程序从 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"
...
}
我刚刚注意到,通过执行 Gradleassemble
任务,我不再获得myApp.war.original
存档(过去在没有所有提供的库的情况下构建),但只有一个包含提供的依赖项。
我在这里错过了什么吗?我真的很想把那些~4MB 的罐子放在lib-provided
文件夹里。提前致谢!
更新 1
按照@ck1 的建议,我将provided
依赖项更改为providedCompile
,但结果是一样的。虽然我已经使用了这个war
插件,但我注意到 task 启动的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
任务(Grails 3 使用的 Gradle 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
.
bootRepackage 任务已替换为 bootJar 和 bootWar 任务,分别用于构建可执行 jar 和 war。这两个任务都扩展了它们等效的标准 Gradle jar 或 war 任务,让您可以访问所有常用的配置选项和行为。
但随后Spring Boot 2.0 迁移指南指出war
任务预计将被跳过:
bootRepackage 任务已替换为 bootJar 和 bootWar 任务,分别用于构建可执行 jar 和 war。不再涉及罐子和战争任务。
再说一次,我错过了什么?