2010-12-30 12 views
44

Maven dependency:analyze se queja de las dependencias en mi proyecto. ¿Cómo determina qué no se utilizan y cuáles no declarados? ¿Qué debo hacer con ellos?¿Qué son las dependencias no utilizadas/no declaradas en Maven? Qué 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 utilizan en mi contenedor de tiempo de ejecución y los declaró lo previsto para evitar que la misma biblioteca en la ruta de clase dos veces con diferentes versiones.

+0

Pregunta relacionada: http://stackoverflow.com/questions/19382814/. –

Respuesta

55

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.

Dependencias no declaradas utilizadas son aquellas que se requieren, pero 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 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, tendrá que especificarlos, esencialmente para controlar version.

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

+4

Además, las dependencias pueden aparecer sin usar, pero realmente lo son. Algunos ejemplos de esto son los controladores jdbc o los archivos de configuración que necesitan contextos de aplicación. – AHungerArtist

+7

Las dependencias con el ámbito 'runtime' o' provided' se marcarán como "Unused declarated" a menos que utilice el indicador 'ignoreNonCompile' al analizar las dependencias. –

+3

¿Por qué es una buena idea declarar explícitamente dependencias transitivas? ¿No es automatizar las dependencias transitivas parte de lo que Maven es bueno? – slim

2

La respuesta a:

"¿Cómo determina que son utilizados y que son no declarado?".

Maven usa Object WebASM marco que analiza su código de bytes 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.

Cuestiones relacionadas