tutorial mvn central java maven

java - mvn - maven version cmd



Encuentra clases duplicadas en classpath (7)

Tengo una aplicación Java construida con Maven con muchas dependencias. Al realizar mis casos de prueba, a veces pasan bien, a veces fallan debido a algunas combinaciones de clases incompatibles. Así que parece que debe haber algunas clases dos veces en classpath que se toman aleatoriamente. El uno está bien el otro no.

  • ¿Cómo puedo saber qué clases / frascos son incompatibles en mi classpath?
  • ¿Cuál es el enfoque correcto que usa Maven para no caer en las trampas de compatibilidad?

Esta es otra sencilla herramienta de búsqueda de código abierto de ruta de clase duplicada: Classpath Inspector

lo que da un informe bastante decente de clases duplicadas en el classpath.


Este problema es básicamente una aplicación del problema más general para "explorar de alguna manera el classpath (CP) y recopilar todos los archivos de clase y otros recursos", y luego encontrar duplicados en ese ...

Hay una serie de bibliotecas existentes para el escaneo de CP (y no es trivial hacerlo bien en todos los entornos, especialmente porque el cargador de clases de aplicaciones en Java 9 ya no es un URLClassLoader), especialmente Classgraph, por lo que es relativamente trivial hacerlo. .

PD: para las versiones de Java <9, JHades ( jhades.github.io ) es bueno (pero NOK en Java 9/10/11 ).



Puede detectar definiciones de archivos de clase duplicadas en la ruta de clase o en la ruta del módulo utilizando ClassGraph (exención de responsabilidad, soy el autor de ClassGraph):

for (Entry<String, ResourceList> dup : new ClassGraph().scan().getAllResources().classFilesOnly().findDuplicatePaths()) { System.out.println(dup.getKey()); // Classfile path for (Resource res : dup.getValue()) { System.out.println(" -> " + res.getURL()); // Resource URL, showing classpath element } }


Puede usar la dependencia de maven: árbol para ver la jerarquía de maven de su proyecto y la exclusión de maven para excluir los archivos jar que no desea


Puedes intentar usar esta herramienta Tattletale .