tutorial proyecto mvc framework español edicion cuarta crear books arquitectura accion maven dependencies maven-2

maven - proyecto - spring mvc 4 tutorial español



¿Cuáles son las dependencias no utilizadas/no declaradas en Maven? Qué hacer con ellos? (2)

dependency:analyze Maven dependency:analyze quejas sobre las dependencias en mi proyecto. ¿Cómo determina qué no se utilizan y cuáles no declarados? ¿Qué debo hacer con ellos?

Ejemplo:

$ mvn dependency:analyze ... [WARNING] Used undeclared dependencies found: [WARNING] org.slf4j:slf4j-api:jar:1.5.0:provided [WARNING] commons-logging:commons-logging:jar:1.1.1:compile [WARNING] commons-dbutils:commons-dbutils:jar:1.1-osgi:provided [WARNING] org.codehaus.jackson:jackson-core-asl:jar:1.6.1:compile ... [WARNING] Unused declared dependencies found: [WARNING] commons-cli:commons-cli:jar:1.0:compile [WARNING] org.mortbay.jetty:servlet-api:jar:2.5-20081211:test [WARNING] org.apache.httpcomponents:httpclient:jar:4.0-alpha4:compile [WARNING] commons-collections:commons-collections:jar:3.2:provided [WARNING] javax.mail:mail:jar:1.4:provided

Nota: Muchas de estas dependencias se usan en mi contenedor de tiempo de ejecución y las declare como provistas para evitar tener la misma biblioteca en el classpath dos veces con diferentes versiones.


La respuesta a:

"¿Cómo determina qué no se utilizan y cuáles no declarados?".

Maven utiliza el marco Object WebASM que analiza su bytecode sin formato. Pasa por todas sus clases y luego crea una lista de todas las clases a las que hace referencia. Ese es el cómo.

En cuanto a qué hacer, no recomendaría eliminar las "dependencias declaradas no utilizadas" a menos que esté absolutamente seguro de que realmente no se usaron.


No estoy seguro de cómo Maven determina esto. No es necesario abordar todos los elementos informados por este, pero esta información se puede usar según corresponda.

Las dependencias no declaradas utilizadas son aquellas que se requieren, pero que no se han declarado explícitamente como dependencias en su proyecto. Sin embargo, están disponibles gracias a la dependencia transitiva de otras dependencias en su proyecto. Es una buena idea declarar explícitamente estas dependencias. Esto también le permite controlar la versión de estas dependencias (tal vez coincida con la versión proporcionada por su tiempo de ejecución).

En cuanto a las dependencias declaradas no utilizadas , es una buena idea eliminarlas. ¿Por qué agregar una dependencia innecesaria a su proyecto? Pero entonces la transitividad puede traerlos de todos modos, tal vez, en conflicto con sus versiones de tiempo de ejecución. En este caso, deberá especificarlos, esencialmente para controlar la version .

Por cierto, mvn dependency:tree proporciona el árbol de dependencias del proyecto, que le brinda una mejor perspectiva de cómo encaja cada dependencia en su proyecto.