J'ai un projet X existant auquel j'ajoute le SDK AWS, mais pour une raison quelconque, il essaie d'utiliser une ancienne version d'Apache Commons. httpclient
et explose.
Projet X déjà requis httpclient
dans son pom.xml
sans version, et le SDK AWS v1.11.52 spécifie httpclient
v4.5.2 comme dépendance. Puisqu'il n'y avait pas de version, j'ai défini la version 4.5.2 dans le fichier de projet X. pom.xml
. La compilation est réussie, mais lorsque j'essaie d'utiliser le code dans une page JSP hébergée par Tomcat, j'obtiens cette erreur :
HTTP Status 500 - Handler processing failed; nested exception is java.lang.NoSuchMethodError: org.apache.http.conn.ssl.SSLConnectionSocketFactory.<init>(Ljavax/net/ssl/SSLContext;Ljavax/net/ssl/HostnameVerifier;)V
En regardant le lib
dans Tomcat, je vois le jar pour httpclient
La v4.3 est là. J'ai confirmé que le constructeur dans l'erreur n'existe pas dans la v4.3, mais qu'il existe dans la v4.5.2.
J'ai fait en sorte d'utiliser mvn clean
, effacer mon fichier classpath, et j'ai également essayé de supprimer ~/.m2
mais lorsque je reconstruis le projet, la version 4.3 de l'outil de gestion de l'information de l'entreprise est utilisée. httpclient
est toujours tiré vers l'intérieur. Je n'utilise pas d'IDE, seulement Maven. J'ai vérifié le projet pour m'assurer qu'il n'y a aucune mention de la v4.3 nulle part et je ne comprends pas pourquoi cela se produit.
J'ai vérifié mes informations de dépendance avec mvn depdency:tree -Dverbose
. Voici la partie pertinente, httpclient
n'est mentionné nulle part ailleurs :
[INFO] +- org.apache.httpcomponents:httpclient:jar:4.5.2:compile
[INFO] | +- org.apache.httpcomponents:httpcore:jar:4.3:compile (version managed from 4.4.4)
[INFO] | +- commons-logging:commons-logging:jar:1.1.3:compile (version managed from 1.2)
[INFO] | \- commons-codec:commons-codec:jar:1.9:compile
...
[INFO] | +- com.amazonaws:aws-java-sdk-core:jar:1.11.52:compile
[INFO] | | +- (commons-logging:commons-logging:jar:1.1.3:compile - version managed from 1.2; omitted for duplicate)
[INFO] | | +- (org.apache.httpcomponents:httpclient:jar:4.3:compile - version managed from 4.5.2; omitted for conflict with 4.5.2)
Pourquoi une version n'est-elle pas mentionnée dans l'une de mes listes de diffusion ? pom.xml
des fichiers en cours d'extraction ? Je peux faire en sorte que maven explique version managed
plus en détail ? Le plus important, Existe-t-il un moyen de forcer le numéro de version de ma dépendance ?
Mise à jour : Le problème était que l'ancienne version était incluse dans le pom parent ; j'ai manqué cela et je n'ai pas pu le comprendre à partir de la page d'accueil. dependency:tree
sortie. La mise à jour du pom parent a résolu le problème. Désolé pour la fausse alerte.