with shade plugin make dependency java jar dependencies maven

java - shade - maven-jar-plugin



Cómo enumerar las dependencias de un JAR (8)

Esta podría ser una alternativa para esta herramienta. Pero no enumera las clases referenciadas. El último número determina el "nivel del paquete".

jar tvf yourjar.jar | perl -nle''BEGIN{$depth=(shift)-1}print join(".", (split(////, (split)[-1]))[0..$depth])'' 3

El problema es que de esta manera es imposible obtener clases referenciadas fuera de las definiciones de clase. Entonces, la única manera posible parece ser hacerlo en JAVA.

Entonces la pregunta es: ¿hay alguna herramienta Java que pueda hacerlo?

EDITAR:

Encontré lo que necesitaba: M2eclipse tiene una función llamada búsqueda de clase

En la vista de repositorios maven, haga clic derecho en un repositorio y habilite el índice completo

A continuación, navega> Abre el tipo de maven - allí puedes ver todos los artefactos disponibles según la convención del paquete java

¿Existe alguna herramienta que pueda enumerar los "paquetes" de terceros que contienen clases (de terceros) a las que se hace referencia en el JAR? Digamos que reconocería qué es el paquete "de inicio" de la definición de archivo JAR e imprimiría una lista de nombres completos de clases de terceros de hasta 3er nivel a los que se hace referencia en el JAR.

org.apache.commons org.apache.maven javax.servlet.jsp org.eclipse.persistence org.apache.jackrabbit

el propósito es que necesito encontrar dependencias maven para ese archivo JAR y desplegarlo como un artefacto experto.


Hay una nueva herramienta desde JDK 8: jdeps

https://wiki.openjdk.java.net/display/JDK8/Java+Dependency+Analysis+Tool

jdeps es una nueva herramienta de línea de comandos agregada desde JDK 8 para que los desarrolladores la utilicen para comprender las dependencias estáticas de sus aplicaciones y bibliotecas. jdeps es una herramienta de análisis estático en los archivos de clase dados


Lo primero que pensé fue que podía hacer esto usando un cargador de clases para iterar sobre todos los archivos de clase en el contenedor y usar el reflejo para analizar cada uno de ellos para sus dependencias. Sin embargo, la clase Class no tiene un método que le indique esta información. Entonces, el siguiente pensamiento sería usar algún tipo de analizador de asm de asm ( asm por ejemplo) para extraer todas las clases referenciadas de una clase de compilación.

Suponiendo que pueda obtener esta información, el próximo problema sería realizar un seguimiento de las clases hasta los tarros. En cierto sentido, esta sería la parte fácil porque todo lo que tendría que hacer es crear un cargador de clases para cada jar en su repositorio maven, o directorio o dondequiera que estén los frascos, y luego preguntar a cada uno si contenía la clase específica.

El error en ese pensamiento es que una clase Java (fuente cruda o compilada) no detalla de dónde obtener la clase importada. Entonces, si tiene dos clases con el mismo paquete y nombre (sucede más a menudo de lo que podría pensar), entonces no podrá decir cuál usar.

Incluso Java solo asume que el primero que encuentra en la ruta de clase es el correcto y arroja una excepción si resulta ser incorrecto (MethodNotFoundException). Así que, a menos que analice más el bytecode para descubrir qué métodos se llaman en cada clase y luego compararlos con las clases en su ruta de clase, todavía no podrá ser correcto.

En resumen, probablemente sea posible hacer lo que quiera, pero es probable que sea muy difícil y lento.

La forma en que normalmente me ocupo de esto es simplemente activar la clase en el código de prueba y seguir añadiendo dependencias hasta que pueda ejecutar todos los métodos que me interesan.


Puedes hacer lo siguiente (si es un proyecto experto):

mvn dependency:tree

También muestra dependencias transitorias, por lo que es muy útil para depurar conflictos de dependencia.


Si el tuyo es un proyecto basado en maven

mvn dependency:build-classpath -Dmdep.pathSeparator=":" -Dmdep.prefix='''' -Dmdep.fileSeparator=":" -Dmdep.outputFile=classpath

Mire el siguiente enlace http://maven.apache.org/plugins/maven-dependency-plugin/build-classpath-mojo.html

Puede estar en tu caso

mvn dependency:build-classpath -Dmdep.pathSeparator=":" -Dmdep.prefix='''' -Dmdep.fileSeparator=":" -Dmdep.outputFile=classpath -f pathtopom.xml of third party


Si usas maven (como entendí), simplemente puedes usar el complemento Maven Dependency.

Primero necesitas escribir un pom.xml básico con todos tus frascos, puedes copiar este ejemplo (yo uso hibernate como ejemplo) y sustituir tus frascos:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>Maven Quick Start Archetype</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.5.0-Final</version> </dependency> <!-- add here other dependencies --> </dependencies> </project>

a continuación, abra la terminal, vaya a la carpeta contenedora de la pom.xml anterior y ejecute este comando:

dependencia mvn: árbol

esto imprimirá una lista de dependencias ...

o si desea descargar y copiar en una carpeta, todas las dependencias ejecutan el siguiente comando:

dependencia de mvn: dependencias de copia

encontrará todas sus dependencias en la carpeta ./target/dependencies


Tattleltale es una herramienta de JBoss que hace esto

tattletale.jboss.org/


JarAnalyzer :

una utilidad de administración de dependencia para archivos jar. Su objetivo principal es recorrer un directorio, analizar cada uno de los archivos jar en ese directorio e identificar las dependencias entre los archivos jar. El resultado es un archivo xml que representa las PhysicalDependencies entre los archivos jar.

Para obtener más información sobre PhysicalDependencies , incluida una variedad de patrones de diseño, consulte Extensible Java ...