Pourquoi l'ordre des dépendances Maven question?
J'ai pensé que l'ordre des dépendances Maven n'a pas d'importance avant et c'est une pro de il. Et c'est ma vieille pom.xml
's dépendances:
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.19</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-spring3</artifactId>
<version>2.19</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>2.19</version>
</dependency>
</dependencies>
Il fonctionne bien, et aujourd'hui, je veux déplacer le printemps de la dépendance vers le bas, de sorte que ces jersey connexes peuvent être ensemble. Toutefois, alors je ne peux plus faire ce travail, mon Jetty se plaint:
[ERROR] Failed to execute goal org.eclipse.jetty:jetty-maven-plugin:9.3.0.M1:run (default-cli) on project mtest: Execution default-cli of goal org.eclipse.jetty:jetty-maven-plugin:9.3.0.M1:run failed: A required class was missing while executing org.eclipse.jetty:jetty-maven-plugin:9.3.0.M1:run: org/apache/commons/logging/LogFactory
Qui est vraiment déroutant, donc puis-je avoir des inquiétudes sur les dépendances de l'ordre? Comment puis-je connaître le bon ordre?
- Pourrait ne pas répondre directement à votre question, mais j'ai l'habitude de simplement les déclarer l'commons-logging. Vérifiez si vous avez toujours le problème après dont il
- après, y compris, mon Jetée lancée avec succès, mais mes services ne peuvent pas s'exécuter.
Vous devez vous connecter pour publier un commentaire.
L'ordre des dépendances ne affaire en raison de la façon dont Maven résout les dépendances transitives, à partir de la version 2.0.9. Extrait de la la documentation:
Pour élargir l'autre réponse (qui stipule que l'ordre de déclaration, affecte Maven de la dépendance de la médiation pour les dépendances transitives), il existe quelques outils que vous pouvez utiliser:
mvn dependency:tree [-Dscope=[runtime|test]]
va vous montrer quelles sont les dépendances seront disponibles pour l'étendue sélectionnée. Voir ici pour les détailsmvn dependency:build-classpath
vous donne l'ordre dans lequel les dépendances sont disponibles sur votre classpath (si deux ou plus de deux classpath les entrées ont la même classe, le plus tôt que l'on gagne). Voir ici pour les détailsJe ne sais pas beaucoup au sujet de votre situation, mais c'est souvent le cas de vous retrouver avec la mauvaise version de 1 ou plusieurs bocaux lors de la compilation/exécution. En déclarant votre propre version de la bibliothèque en question ou le verrouillage de la version avec
<dependencyManagement>
sont les options ici.Maintenant pour répondre à votre autre question - comment savez-vous quel est le bon ordre est lors de la déclaration des dépendances?
Ma suggestion - le bon ordre de déclaration, est celui qui vous obtient les versions des dépendances que vous voulez, dans l'ordre que vous voulez dans. Utilisez les outils ci-dessus pour vérifier vos dépendances, et de modifier la déclaration de l'ordre si nécessaire.
Noter que la plupart des pots contiennent disjointedly-nommé classes, de sorte que l'ordre exact dans lequel les pots apparaissent sur votre chemin de classe est généralement pas si important que cela. La seule exception que j'ai remarqué, c'est quelques pots de SLF4J qui intentionnellement ombre des classes de l'autre enregistreur de bibliothèques, il est destiné à remplacer.