2 votes

Maven utilise une version plus ancienne que celle spécifiée dans le fichier pom.xml.

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.

3voto

S'il n'y a pas de dépendance directe, mais seulement des dépendances indirectes, Maven choisira la première qu'il trouve, et cela dépend purement de l'ordre de votre arbre de dépendance complet. Vous pouvez forcer la version à être celle que vous voulez, par :

Remarque : vous pouvez également mettre à jour les versions de certaines dépendances indirectes de httpclient de la même manière si vous rencontrez d'autres problèmes.

Si vous voulez en savoir plus, jetez un coup d'œil à cet article. Beaucoup d'informations y sont expliquées : Comment indiquer à Maven d'utiliser la dernière version d'une dépendance ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X