Gradle crée guerre avec servlet-api 2.5 au lieu de 3.0.1
Je suis en utilisant Gradle 1.9 (détails ci-dessous) afin de construire une GUERRE qui se déroulera au cours de la Jetée 9 (jetty-9.0.5.v20130815).
Il est configuré dans web.xml
-
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:fmt="http://java.sun.com/jsp/jstl/fmt"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
...
construire.gradle est cette dépendance -
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'
}
bâtiment à l'aide de gradle clean war
produit un fichier WAR avec servlet-api-2.5.jar
dans WEB-INF/lib/
.
Plus d'env détails -
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
De la webapp semblent fonctionner sans servlet-api-2.5.jar
(supprimé manuellement), mais je n'ai pas vérifié toutes les fonctionnalités disponibles.
Est-il une dépendance d'une autre bibliothèque?
Est-ce une mauvaise chose?
Est-ce que votre
Oui, l'ajout de la config à la question.
WEB-INF/web.xml
spécifier api servlet 2.5? ou 3.0?Oui, l'ajout de la config à la question.
OriginalL'auteur Kof | 2013-12-16
Vous devez vous connecter pour publier un commentaire.
Vous pouvez exécuter les dépendances de rapport pour voir quelle bibliothèque tire dans le servlet-api-2.5:
Une fois que vous savez quelle bibliothèque tire dans le servlet-api-2.5, vous avez deux options:
Désactiver les dépendances transitives pour la bibliothèque:
Exclure dépendance transitive:
Si vous vous demandez, pourquoi ce conflit n'a pas été résolu par Gradle automatiquement, c'est parce que 2,5 et 3,0 ont des noms différents:
Espère que cela aide.
Mise à jour:
J'ai regardé 'javax.servlet:jstl:1.1.2", il dépend de " javax.servlet:jsp-api:2.0", qui dépend de " javax.servlet:servlet-api:2.4'
Ce qui me confond beaucoup est le fait que si gradle tire dans depedencies par le biais de certains autres (et plus) de la bibliothèque de référence, les dépendances encore spectacle pour la plus récente version de bibliothèque, c'est peut-être celui que vous avez explicitement déclaré transitif:faux
OriginalL'auteur kukido
Dans les versions plus récentes de gradle vous pouvez faire usage de remplacement du module de:
OriginalL'auteur Steven