
Gretty 版本覆盖指南如何替换 Jetty/Tomcat 与 Servlet API 版本【免费下载链接】grettyAdvanced gradle plugin for running web-apps on jetty and tomcat.项目地址: https://gitcode.com/gh_mirrors/gr/grettyGretty 是一款功能强大的 Gradle 插件专为在 Jetty 和 Tomcat 上快速运行 Web 应用而设计支持热部署、Spring Boot、多应用 Farm 等高级特性。很多开发者在使用 Gretty 时遇到的第一道坎就是如何替换默认的 Jetty/Tomcat 容器版本以及如何处理Servlet API 版本冲突。本文用最简方式带你掌握 Gretty 版本覆盖的完整套路让你一次配置、处处生效。为什么要手动覆盖 Gretty 的容器版本Gretty 默认内置了一套经过测试的 Jetty / Tomcat 版本默认容器为 Jetty 9。但在实际项目中你往往需要与公司统一的技术栈对齐比如统一使用 Tomcat 8验证应用在不同 Servlet 容器上的兼容性修复特定 Jetty 版本的安全漏洞让本地开发环境与线上服务器版本完全一致。Gretty 为此提供了两条并行的配置路径切换容器类型与覆盖具体版本号。Gretty 支持哪些 Jetty 与 Tomcat 版本根据 Gretty 的核心配置源码libs/gretty/src/main/groovy/org/akhikhl/gretty/ServletContainerConfig.groovyGretty 内置了以下容器配置项servletContainer 取值容器类型对应 Servlet APIjetty7Jetty 7.6Servlet 2.5jetty8Jetty 8.1Servlet 3.0.1jetty9默认Jetty 9.2Servlet 3.1jetty9.3Jetty 9.3Servlet 3.1jetty9.4Jetty 9.4Servlet 3.1tomcat7Tomcat 7Servlet 3.0.1tomcat8Tomcat 8Servlet 3.1注意jetty9.3与jetty9.4仅在 Java 8 及以上环境中可用源码中通过 Java 版本判断动态注册。方法一一行配置切换 Jetty / Tomcat最简单的替换方式是在build.gradle的gretty配置块中指定servletContainergretty { servletContainer tomcat8 // 或 jetty7、jetty8、jetty9、jetty9.3、jetty9.4、tomcat7 }保存后重新执行gradle appRunGretty 会自动拉取对应的 gretty-runner 运行器并强制锁定配套的容器依赖版本无需你手动引入任何 Jetty/Tomcat 依赖。方法二在 gradle.properties 中精确覆盖版本号如果内置的版本号不满足需求你可以在项目的gradle.properties中直接覆盖。Gretty 在插件初始化时会优先读取你定义的属性参见libs/gretty/src/main/groovy/org/akhikhl/gretty/GrettyPlugin.groovy中的apply逻辑。以项目根目录gradle.properties中的默认值为参考覆盖方式如下jetty7Version7.6.21.v20160908 jetty7ServletApiVersion2.5 jetty8Version8.1.14.v20131031 jetty8ServletApiVersion3.0.1 jetty9Version9.2.22.v20170606 jetty93Version9.3.20.v20170531 jetty94Version9.4.6.v20170531 jetty9ServletApiVersion3.1.0 tomcat7Version7.0.78 tomcat7ServletApiVersion3.0.1 tomcat8Version8.0.44 tomcat8ServletApiVersion3.1.0属性名规律一目了然容器名 Version控制容器本体容器名 ServletApiVersion控制配套的 Servlet API。所有以jetty、tomcat开头的版本号都能这样覆盖。Servlet API 版本覆盖的注意事项覆盖 Servlet API 是踩坑重灾区牢记以下三点可以少走弯路版本必须互相兼容。例如jetty7对应 Servlet 2.5、jetty8/tomcat7对应 Servlet 3.0.1、jetty9/tomcat8对应 Servlet 3.1不要强行组合。Gretty 会自动 force 依赖。在ServletContainerConfig.groovy中每个容器配置都通过resolutionStrategy { force ... }锁定容器依赖即使项目里有其他传递依赖也不会把版本带偏。编译期与运行期保持一致。Gretty 通过grettyProvidedCompile配置提供 Servlet API 依赖javax.servlet:javax.servlet-api确保你编译时用的 API 版本和运行时容器提供的完全一致避免NoSuchMethodError。常见问题排查提示 Unsupported servlet container检查servletContainer拼写只支持上文表格中的 7 个取值。切换容器后项目启动报 ClassNotFoundException先清理构建产物gradle clean再确认gradle.properties中覆盖的版本号真实存在。Java 8 以下无法使用 jetty9.3/9.4换回jetty9或升级 JDK。写在最后掌握 Gretty 版本覆盖本质就是记住两个动作切换servletContainer和覆盖gradle.properties中的版本属性。前者决定用哪个容器后者决定容器多精确的版本。配合 Gretty 自动的依赖锁定机制你完全可以把容器差异交给 Gretty 管理专心写业务代码。如果你想深入源码理解版本锁定的实现细节可以重点阅读libs/gretty/src/main/groovy/org/akhikhl/gretty/ServletContainerConfig.groovy与GrettyPlugin.groovy两个文件逻辑非常清晰。【免费下载链接】grettyAdvanced gradle plugin for running web-apps on jetty and tomcat.项目地址: https://gitcode.com/gh_mirrors/gr/gretty创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考