我尝试按照 grails 文档中的说明进行操作,并在创建用于部署的 war 文件时尝试删除嵌入式 tomcat 服务器。
但是,即使在 build.gradle 中我有:
...
dependencies {
compile "org.springframework.boot:spring-boot-starter-logging"
compile "org.springframework.boot:spring-boot-starter-actuator"
compile "org.springframework.boot:spring-boot-autoconfigure"
provided "org.springframework.boot:spring-boot-starter-tomcat"
compile "org.grails:grails-dependencies"
compile "org.grails:grails-web-boot"
...
生成的 WAR 文件的大小与将 org.springframework.boot:spring-boot-starter-tomcat 的 compile
修改为 provided
之前的大小相同。
在浏览 WAR 文件时,我仍然看到以下文件:
spring-boot-starter-tomcat-1.2.5.RELEASE.jar tomcat-embed-core-8.0.23.jar tomcat-embed-el-8.0.23.jar tomcat-embed-logging-juli-8.0.23.jar tomcat-embed-websocket-8.0.23.jar问题是,为什么会发生这种情况?
最佳答案
好吧,它似乎是这样工作的,如果 Grails 文档能够更清楚地说明幕后发生的事情,那就太好了。
场景 1:使用 grails war
创建(生产)war 并编译“org.springframework.boot:spring-boot-starter-tomcat”
...
解压/分解war文件,我看到Tomcat嵌入在WEB-INF lib文件夹(5个或更多jar)中,其中包含所有其他所需的应用程序jar,还有一个文件夹org/springframework,其中包含看起来是类的内容启动嵌入式 Tomcat 服务器所需的文件。
场景 2:使用 grails war
创建(生产)war 并提供“org.springframework.boot:spring-boot-starter-tomcat”
...
将 5 个或更多 Tomcat 嵌入式 jar 移出 WEB-INF/lib 并放置在 WEB-INF/lib-provided 中。 org/springframework 文件夹及其内容也不包含在内。
在本地安装上进行测试,您可以将此“场景 2”版本的 war 文件放入 Tomcat Web 应用程序目录中,并且应用程序可以顺利部署(lib 提供的文件夹及其 tomcat 嵌入的 jar 可能会被忽略) .
最后,创建了另一个版本的 war 文件:appname.war.original
这场 war 没有 WEB-INF/lib-provided 也没有 org/springframework 文件夹,并且大小更小(当然)。
这场 war 也部署正确。
为什么 tomcat 嵌入 jar 包含在场景 2 中完全让我困惑,但你知道了......
这里也有一个讨论:
https://jira.grails.org/browse/GRAILS-12078
在某种程度上,grails 文档是正确的。您可以通过添加提供的内容来删除嵌入式 tomcat 服务器
出于某种原因,它仍然将 jar 捆绑到名为 lib-provided
的文件夹中。
希望这对思考同样问题的其他人有所帮助。
关于tomcat - 无法从 Grails 3.0.7 应用程序 war 中删除嵌入式 Tomcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33263735/