¿Hay una manera simple de eliminar las dependencias no utilizadas de un pom.xml maven?

277

Tengo un gran proyecto Maven con muchos módulos y muchos pom.xmlarchivos. El proyecto ha cambiado y sospecho que los pom contienen algunas dependencias innecesarias. ¿Hay un comando que elimine las dependencias no utilizadas de un pom?

pantalones
fuente
2
Si está utilizando IntelliJ, vea esto: jonnyzzz.com/blog/2013/05/13/… En caso de enlace muerto: plugin Jonnyzzz Dependencies
Benj
3
@Benj Traté de usar este complemento jonnyzz, y fue inútil. La mayoría de las veces no encontrará dependencias no utilizadas y, a veces, cuando lo haga, eliminaría las dependencias de la ruta de clase, no del archivo build.gradle. Ni siquiera puedo encontrar el documento adecuado para explicar cómo funciona realmente este complemento.
vaibhav.g
@ vaibhav.g gracias por la actualización. Parece que las cosas cambiaron desde 2016 entonces.
Benj

Respuestas:

222

El complemento de dependencia de Maven ayudará, especialmente el dependency:analyzeobjetivo:

dependency:analyzeanaliza las dependencias de este proyecto y determina cuáles son: utilizadas y declaradas; usado y no declarado; sin usar y declarado.

Otra cosa que podría ayudar a hacer una limpieza es el informe de convergencia de dependencias del complemento de informes de información del proyecto Maven .

Pascal Thivent
fuente
55
¿Cómo puedo activar esto en Eclipse?
Daniil Shevelev
134
Tenga cuidado con la dependencia: analice, algunas bibliotecas utilizadas en tiempo de ejecución se consideran no utilizadas.
Nereis
27
Para evitar informar el tiempo de ejecución y las dependencias proporcionadas como no utilizadas, la ignoreNonCompileopción se puede establecer en verdadero.
sudeep
tenga cuidado al usar la dependencia: analice, incluso yo estaba usando la dependencia 'ejp api3' pero el informe mostró que estaba 'sin usar y declarado'
Akhil S Kamath
Para comprender los resultados del análisis, vea esta respuesta: "Las dependencias no declaradas utilizadas son aquellas que se requieren, pero no se han declarado explícitamente como dependencias en su proyecto". - stackoverflow.com/questions/4565740/…
Janac Meena
49

Puedes usar dependency:analyze -DignoreNonCompile

Esto imprimirá una lista de dependencias declaradas no declaradas y no utilizadas (al tiempo que ignora runtime/ provided/ test/ systemámbitos para el análisis de dependencia no utilizada).

Tenga cuidado al usar esto, ¡algunas bibliotecas utilizadas en runtimese consideran no utilizadas!

Para más detalles consulte este enlace

Saikat
fuente
44
[más] 1 para la mención de tiempo de ejecución!
gaurav
1
Tienes razón, algunas dependencias de tiempo de ejecución se declaran no utilizadas, pero de hecho son necesarias.
Smart Coder
43

Como otros han dicho, puede usar la dependencia: analizar el objetivo para encontrar qué dependencias se usan y declaran, se usan y no se declaran, o no se usan y se declaran. También puede encontrar dependencia: analyse-dep-mgt útil para buscar desajustes en su sección de gestión de dependencias.

Simplemente puede eliminar las dependencias directas no deseadas de su POM, pero si son introducidas por tarros de terceros, puede usar las <exclusions>etiquetas en una dependencia para excluir los tarros de terceros (consulte la sección titulada Exclusiones de dependencias para más detalles y alguna discusión) . Aquí hay un ejemplo que excluye commons-logging de la dependencia Spring:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring</artifactId>
  <version>2.5.5</version>
  <exclusions>
    <exclusion>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
    </exclusion>
  </exclusions> 
</dependency>
Vendedor rico
fuente
3
(IntelliJ) Usé el complemento Jonnyzzz, como comentaba la pregunta. Bonito complemento, funciona bien con IntelliJ 2016.1.3
Benj
34

¿Has mirado el plugin de dependencia de Maven ? Eso no eliminará cosas por ti, pero tiene herramientas que te permiten hacer el análisis tú mismo. Estoy pensando particularmente en

mvn dependency:tree
Brian Agnew
fuente
1
Excelente - gracias (no podía encontrar lo que estaba buscando mientras continuaba la búsqueda de "dependencias limpias" y estaba vomitando el plugin limpia !! pero esto parece prometedor .. dependencia mvn: analizar)
14

Tuve un problema similar y decidí escribir un script que elimine las dependencias para mí. Usando eso, eliminé más de la mitad de las dependencias con bastante facilidad.

http://samulisiivonen.blogspot.com/2012/01/cleanin-up-maven-dependencies.html

usuario1132305
fuente
2
Tenga en cuenta que este script no se usa mvn dependency:analyze. Solo intenta eliminar todas las dependencias y comprueba si mvn installfunciona.
Dieter