En mi proyecto hay una clase que implementa una interfaz. La interfaz proviene de una dependencia. Tengo otra dependencia que también tiene una dependencia en un jar que también contiene la misma interfaz, excepto una versión con más métodos; las dos jarras que contienen la misma interfaz de paquete NO tienen el mismo ID de grupo o artefacto.
La compilación está fallando porque el compilador se queja de que la clase en mi proyecto no está implementando todos los métodos. Me di cuenta de que es porque el compilador toma la referencia de la interfaz del contenedor equivocado. Mi pregunta es, , ¿por qué maven usa la interfaz de la dependencia transitiva en lugar de la del jar que menciono explícitamente en el POM del proyecto? Veo que el jar que se usa aparece antes en la definición (así que me lo imagino en el classpath también), pero pensé que en estos casos maven lo resolvió usando la clase/interfaz colisionando de la dependencia con el , el camino más cortoOrden de dependencia de Maven
Aquí está la parte del árbol de dependencias. Tenga en cuenta que esto se grepped pero todavía puede verse que javax.servlet:servlet-api
(la que realmente se) es más profunda en el árbol en comparación con tomcat:servlet
(la que debe ser usado)
[[email protected] proj]$ mvn dependency:tree | grep servlet
[INFO] | +- javax.servlet:servlet-api:jar:2.4:compile
[INFO] +- tomcat:servlet:jar:4.0.6:compile
estoy usando Maven 3.0 0.4
tomcat: servlet: jar debe proporcionarse, no compilar. Debería compilar contra javax.servlet: servlet-api y agregar una dependencia en la versión adecuada. – OrangeDog