我正在使用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.jar
WEB-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
(手动删除),但我没有检查所有可用的功能.
它是其他图书馆的依赖吗?这是坏事吗?
您可以运行依赖项报告以查看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'
在较新版本的gradle中,您可以使用模块替换:
dependencies { modules { module("javax.servlet:servlet-api") { replacedBy("javax.servlet:javax.servlet-api") } } }