2011-01-20 13 views
5

Tengo un montón de archivos JAR (de un proyecto maven2) y maven informa que no se pudo encontrar algún paquete (org.openanzo.client.jena para ser exactos). Quiero profundizar en los archivos JAR descargados como resultado de la resolución de dependencia maven y encontrar qué paquetes están disponibles de estos archivos JAR. ¿Insights?¿Cómo puedo encontrar los paquetes definidos en un contenedor?

ACTUALIZACIÓN: Aparentemente, la única buena solución para inspeccionar el interior de un archivo jar es la utilidad "jar" o uno puede usar las instalaciones de su IDE para hacerlo.

+0

¿qué quiere decir con "informes de maven que no se pudo encontrar algún paquete"? ¿Qué comando estás tratando de ejecutar? ¿Cuál es el mensaje? ¿Hay alguna otra información provista? Por lo general, tal error no aparece sin contexto. –

+0

@Zac: tienes razón. Fue mi falta de familiaridad con Maven lo que me hizo creer que el problema es una jarra faltante. Lo solucioné por cierto. Tnx para su consideración. –

Respuesta

11

jar tvf filename.jar le mostrará el contenido de un archivo jar sin necesidad de extraerlo.

Pero creo que tal vez lo que realmente está tratando de hacer es encontrar las coordenadas correctas para la dependencia que le hace falta, ya que obviamente ninguno de los que tiene en este momento está suministrando el paquete que está buscando (en otro palabras, revisar sus contenidos no es probable que lo ayuden).

Confieso que el primer lugar que sugiero comprobar es public Nexus instance de Sonatype. Sin embargo, una búsqueda de your example no da resultado. Usualmente eso significa que el proyecto no está tratando de llevar sus cosas a Maven Central u otros repositorios importantes (lo que está bien), por lo que debe recurrir a una búsqueda en la web. Por lo general, las dos primeras secciones del paquete le indican dónde buscar (openanzo.org en su caso).

1

Los archivos .jar son solo archivos ZIP comprimidos, renómbrelos a zip, ábralos con su programa de descompresión favorito y recorra el directorio.

Si agrega el archivo jar a un proyecto de eclipse, puede recorrer la lib en el explorador de proyectos.

HTH

9

Si está en Linux o un Mac, usted podría ir a la terminal en la raíz de la carpeta que contiene sus archivos JAR y tipo:

# grep -ri "org.openanzo.client.jena" * 

Se devolverá una lista recursiva de todos los archivos JAR que contienen ese nombre de paquete. Si devuelve 0 resultados, ninguno de esos JARS contiene ese paquete.

Si desea hacer una búsqueda más exhaustiva, podría DESARMAR los archivos JAR. La estructura del directorio y los archivos .class se organizarán por paquetes en carpetas.

# jar xvf filename.jar 

Si está en Windows, puede unjar un archivo JAR utilizando una herramienta como 7Zip.

+1

si está en Windows, puede usar cygwin y linux grep :) – MartinC

0

Suponiendo que maven haya descargado los archivos jar, los archivos se cargarán en un repositorio local. Puede usar el navegador maven que viene empaquetado con Eclipse para navegar y buscar artefactos en su repositorio. (Generalmente en userdir/.m2/repository)

Nota: Puede explorar su repositorio directamente si lo desea. Comprenderá los paquetes que se descargaron. Pero sugiero usar el complemento.

Si está utilizando Intellij IDEA, cada proyecto contiene un árbol llamado Biblioteca externa que le permite buscar y explorar sus bibliotecas.

2

@Carsten no es necesario cambiar el nombre de un archivo .jar a .zip.Puede abrir directamente el archivo jar en winzip u otra utilidad zip (asumiendo el sistema operativo Windows)

@ ashy_32bit intente utilizar el plugin de eclipse "jar class finder" de IBM. sencillo plugin para encontrar clases (si se conoce el nombre de la clase)

O

como Carsten sugirió ... establece los archivos jar como archivos lib y buscar manualmente hacia arriba

O

crear un archivo por lotes llamado a.bat (donde tiene todos sus archivos jar directamente bajo una sola carpeta) y pegar las siguientes líneas 4

@ECHO OFF 
dir /b *.jar > allJarFilesList.txt 
FOR /F %%A IN (allJarFilesList.txt) DO jar -tf %%A > list_of_packages.txt 
FOR %%B IN (list_of_packages.txt) DO FIND /I "com/sun" %%B 

NOTA la "co m/sun "en la última línea ... está codificado, también puede pasar como argumento ...

Sé que esta es una forma muy básica y se puede mejorar" mucho "como buscar en varios sub directorios.

espero que esto ayude :-)

Cuestiones relacionadas