如何在 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 版本?

如何为Android NDK的gradle构建文件中指定NDK

gradle 不会从我在 build.gradle 中指定的库中的依赖版本中的父属性中解析占位符