如何在 Gradle 中指定 servlet-api 版本?
Posted
技术标签:
【中文标题】如何在 Gradle 中指定 servlet-api 版本?【英文标题】:How to specify servlet-api version in Gradle? 【发布时间】:2015-03-10 21:30:08 【问题描述】:我找到了一种方法来指定目标 servlet-api 版本并在 maven 中使用 Tomcat 7:http://docs.spring.io/spring-boot/docs/current/reference/html/howto-embedded-servlet-containers.html#howto-use-tomcat-7 这是通过在 pom.xml 中设置这些属性来完成的:
<properties>
<tomcat.version>7.0.56</tomcat.version>
<servlet-api.version>3.0.1</servlet-api.version>
</properties>
但我不知道如何在 Gradle 构建中进行设置。
【问题讨论】:
【参考方案1】:不幸的是,重写属性来设置依赖的版本只在 Maven 中有效。您可以使用解析策略在 Gradle 中实现相同的效果。以下将导致所有 Boot 的 Tomcat 依赖到版本 7.0.56:
configurations.all
resolutionStrategy
eachDependency
if (it.requested.group == 'org.apache.tomcat.embed')
it.useVersion '7.0.56'
【讨论】:
根据进程列表,它仍然在运行tomcat 8。但是,我不太关心tomcat版本。我主要关心 servlet API 版本。是否可以以类似的方式更改 Servlet-API 版本? Tomcat 8 需要 Servlet 3.1,因此尝试使用 3.0 是行不通的 您是如何从进程列表中得知 Tomcat 8 仍在使用的?您要部署到独立容器吗?运行gradle dependencies
将让您确认您构建的版本现在正在使用。
可以看到运行过程中的classpath,看看使用了哪些jar版本。好吧,我已经放弃了 spring-boot,因为我遇到了其他问题。我在一个小的孤立项目中尝试了更改,实际上我看到它拾取了 tomcat7,但它在作为我们系统的一部分的子项目中对我不起作用。也许是我们的 gradle 脚本有问题,我不知道,但我最近不想弄清楚,抱歉,也许过一段时间我会尝试一下,因为我喜欢 spring-boot 的概念.
底线是更改似乎在一个最小的项目中起作用,所以我将其标记为最佳答案。虽然它没有解决我的特殊情况的问题。【参考方案2】:
试试这个:
ext
tomcatVersion = "3.1.0.RELEASE"
servlet-apiVersion = "build@master.org"
【讨论】:
"servlet-apiVersion" 语法无效。但是,我认为 gradle 插件不会从 ext 中获取这些值,因为我 grepped 插件数据库并没有找到任何提及关于 tomcat 或 servlet-api 版本。它看起来没有实现。以上是关于如何在 Gradle 中指定 servlet-api 版本?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Gradle 中指定 servlet-api 版本?
即使在 build.gradle 中指定,也无法解析符号“EnableJpaRespositories”
如何在 CodeNameOne 项目中指定 abiFilters?
如何在 Android Studio 中指定 JDK 版本?