Gradle使用servlet-api 2.5而不是3.0.1创建war

 手机用户2502938015 发布于 2023-02-10 11:06

我正在使用Gradle 1.9(下面的额外详细信息)来构建一个将在Jetty 9(jetty-9.0.5.v20130815)上运行的WAR.

它配置为web.xml-


...

build.gradle有这种依赖 -

repositories {
    mavenCentral()
}
dependencies {
    providedCompile 'javax.servlet:javax.servlet-api:3.0.1'
    compile 'org.springframework:spring-webmvc:3.2.2.RELEASE'
    compile 'javax.mail:mail:1.4.7'
    compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.13'
    compile 'org.apache.directory.studio:org.apache.commons.io:2.4'
    compile 'commons-net:commons-net:3.3'
    compile 'mysql:mysql-connector-java:5.1.26'
    compile 'org.springframework:spring-jdbc:3.2.4.RELEASE'
    compile 'commons-fileupload:commons-fileupload:1.3'
    compile 'commons-pool:commons-pool:1.6'
    compile 'commons-dbcp:commons-dbcp:1.4'
    compile 'log4j:log4j:1.2.17'
    compile 'org.slf4j:slf4j-api:1.7.5'
    compile 'org.slf4j:slf4j-log4j12:1.7.5'
    runtime 'javax.servlet:jstl:1.1.2'
}

building using使用in gradle clean war生成一个WAR文件.servlet-api-2.5.jarWEB-INF/lib/

更多环境细节 -

Build time:   2013-11-19 08:20:02 UTC
Build number: none
Revision:     7970ec3503b4f5767ee1c1c69f8b4186c4763e3d

Groovy:       1.8.6
Ant:          Apache Ant(TM) version 1.9.2 compiled on July 8 2013
Ivy:          2.2.0
JVM:          1.7.0_45 (Oracle Corporation 24.45-b08)
OS:           Mac OS X 10.9 x86_64

webapp似乎没有servlet-api-2.5.jar(手动删除),但我没有检查所有可用的功能.

它是其他图书馆的依赖吗?这是坏事吗?

2 个回答
  • 您可以运行依赖项报告以查看servlet-api-2.5中的哪个库:

    gradle dependencies --configuration runtime
    

    一旦你知道哪个库引入了servlet-api-2.5,你有两个选择:

    禁用库的传递依赖项:

    runtime('org.hibernate:hibernate:3.0.5') {
       transitive = false
    }
    runtime group: 'org.hibernate', name: 'hibernate', version: '3.0.5', transitive: false
    

    排除特定的传递依赖:

    compile('org.hibernate:hibernate:3.1') {
      //excluding a particular transitive dependency:
      exclude module: 'cglib' //by artifact name
      exclude group: 'org.jmock' //by group
      exclude group: 'org.unwanted', module: 'iAmBuggy' //by both name and group
    }
    

    如果你想知道为什么Gradle自动没有解决这个冲突,那是因为2.5和3.0有不同的名字:

    javax.servlet:servlet-api:2.5
    javax.servlet:javax.servlet-api:3.0.1
    

    希望能帮助到你.

    更新:

    我看了'javax.servlet:jstl:1.1.2',它取决于'javax.servlet:jsp-api:2.0',它取决于'javax.servlet:servlet-api:2.4'

    2023-02-10 11:09 回答
  • 在较新版本的gradle中,您可以使用模块替换:

    dependencies {
        modules {
            module("javax.servlet:servlet-api") {
                replacedBy("javax.servlet:javax.servlet-api")
            }
        }
    }
    

    2023-02-10 11:09 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有