dinnerbone anlyticsed all java linux shell jar

java - anlyticsed - Lista de contenidos de mĂșltiples archivos jar



all minecraft title screen messages (9)

Estoy buscando un archivo .class dentro de un montón de frascos.

jar tf abc.jar

Funciona para un archivo. Lo intenté

find -name "*.jar" | xargs jar tf

no imprime nada La única solución que se me ocurre es descomprimir todo y luego buscar. ¿Hay alguna manera mejor? Estoy en lunix

Editar : cuando se escanean muchos archivos jar, es útil imprimir el nombre del archivo jar junto con la clase. Este método funciona bien:

find . | grep jar$ | while read fname; do jar tf $fname | grep SchemaBuilder && echo $fname; done

Salida de muestra producida:

1572 Wed Jul 25 10:20:18 EDT 2007 org/apache/ws/commons/schema/SchemaBuilder$1.class 1718 Wed Jul 25 10:20:18 EDT 2007 org/apache/ws/commons/schema/SchemaBuilder$2.class 42607 Wed Jul 25 10:20:18 EDT 2007 org/apache/ws/commons/schema/SchemaBuilder.class ./XmlSchema-1.3.2.jar 1572 Wed Jul 25 10:20:18 EDT 2007 org/apache/ws/commons/schema/SchemaBuilder$1.class 1718 Wed Jul 25 10:20:18 EDT 2007 org/apache/ws/commons/schema/SchemaBuilder$2.class 42607 Wed Jul 25 10:20:18 EDT 2007 org/apache/ws/commons/schema/SchemaBuilder.class ./XmlSchema.jar


Encuentre archivos jar y obtenga todas las clases y miembros guardados en un txt.

(for j in $(find -name ''*.jar'');do echo "--$j --";jar tf $j | grep .class | sed ''s#/#.#g'' | sed ''s/.class/ /g'' | xargs -n 1 javap -classpath $j ; done;) >> classes.txt


Esto es lo que uso en Cygwin. Admite encabezados de sección por archivo jar como se solicita anteriormente.

find . -name "*.jar" / -exec echo ======/ {}/ ====== /; / -exec /c/Program/ Files/Java/jdk1.7.0_45/bin/jar.exe tf {} /; | less

Para * nix, suelte el ".exe":

find . -name "*.jar" / -exec echo ======/ {}/ ====== /; / -exec jar tf {} /; | less


Me enfrenté a una situación similar en la que necesito buscar una clase en una lista de archivos jar presentes en un directorio. También quería saber de qué archivo jar pertenece la clase. Utilicé este fragmento de código a continuación (shell script) y me resultó útil. La siguiente secuencia de comandos mostrará una lista de los archivos jar que contienen la clase a buscar.

#!/bin/sh LOOK_FOR="codehaus/xfire/spring" for i in `find . -name "*jar"` do echo "Looking in $i ..." jar tvf $i | grep $LOOK_FOR > /dev/null if [ $? == 0 ] then echo "==> Found /"$LOOK_FOR/" in $i" fi done

Shell script tomado de: http://alvinalexander.com/blog/post/java/shell-script-search-search-multiple-jar-files-class-pattern


No veo la necesidad de usar exec, esto me funcionó en Cygwin en Windows:

find . -name "*.jar" | while read jarfile; do unzip -l $jarfile | fgrep "foo" ; done


Si está utilizando Eclipse, puede crear un proyecto y agregar todos los archivos jar. Entonces podrás encontrar una clase en cualquiera de los frascos.


Si llega a esta pregunta y necesita extraer todos los archivos jar en un entorno de Windows, vaya al directorio donde ha guardado todos los archivos jar y guarde un archivo por lotes con el siguiente contenido:

for /r %%f in (*) do jar -xvf %%f

Al ejecutar el archivo por lotes, extraerá cada archivo jar en el directorio. Lo único aquí es que se extraerá en el mismo directorio donde se encuentra el archivo jar.


También puede usar Unzip, que es más rápido que jar (opción -l para imprimir contenido zip).

Por ejemplo, un pequeño script que hace más o menos lo que quieres:

#!/bin/bash for i in $(find . -name "*.jar") do if [ -f $i ] then echo $i unzip -l $i | grep $* fi done


También puedes usar la opción -exec de buscar

find . -name "*.jar" -exec jar tf {} /;


-n 1 pasar -n 1 a xargs para forzarlo a ejecutar un comando jar separado para cada nombre de archivo que obtiene de find :

find -name "*.jar" | xargs -n 1 jar tf

De lo contrario, la línea de comando de jar tf file1.jar file2.jar... parece a jar tf file1.jar file2.jar... , que tiene un significado diferente al que se pretende.

Una técnica de depuración útil es pegar el echo antes del comando que ejecutará xargs :

find -name "*.jar" | xargs echo jar tf

Esto imprimirá el comando jar completo en lugar de ejecutarlo, para que pueda ver qué está mal con él.