Estamos viendo una versión anterior de una clase en uso, aunque tuvimos la última implementación. Para escanear todos los archivos JAR en todas las subcarpetas de un servidor de aplicaciones, ¿cómo escribimos un pequeño script de shell que imprime el nombre de archivo JARS en el que se encuentra esta clase específica?JarScan, escanea todos los archivos JAR en todas las subcarpetas para la clase específica
Respuesta
Algo así como:
find . -name '*.jar' | while read jarfile; do if jar tf "$jarfile" | grep org/jboss/Main; then echo "$jarfile"; fi; done
Usted puede envolver que de esta manera:
jarscan() {
pattern=$(echo $1 | tr . /)
find . -name '*.jar' | while read jarfile; do if jar tf "$jarfile" | grep "$pattern"; then echo "$jarfile"; fi; done
}
Y luego jarscan org.jboss.Main
va a buscar esa clase en todos los archivos jar encontrado en el directorio actual
Ahora, para responder a esta pregunta, hay un comando de shell simple que lo hizo por nosotros.
for jarFile in $(
ls -R |
awk '
match($0, ".*:") {
folder=$0
}
! match($0, ".*:") {
print folder$0
}' |
grep "\.jar" |
sed -e "s/:/\//g"
);
do
unzip -l $jarFile;
done |
awk '
match($0, "Archive.*") {
jar=$0
}
! match($0, "Archive.*") {
print jar" : "$0
}' |
grep org.jboss.Main
Si necesitas resultado sólo entonces se puede instalar agentransack http://www.mythicsoft.com/agentransack/ y hacer una búsqueda de texto que contiene. Agentransack también busca dentro de los archivos jar y zip.
Hace años escribí una utilidad classfind para resolver problemas como este. Establezca su ruta de clases para que apunte a su conjunto .jar, y classfind le dirá en qué jarras encontrará una clase en particular.
example% classfind -c Document
/usr/java/j2sdk1.4.0/jre/lib/rt.jar -> org.w3c.dom.Document
/usr/java/j2sdk1.4.0/jre/lib/rt.jar -> javax.swing.text.Document
No responder directamente a su pregunta, pero tal vez esto va a resolver su problema: se puede imprimir la ubicación (por ejemplo, el archivo JAR) de la que una clase específica se cargó mediante la adición de una simple línea de código:
System.err.println(YourClass.class.getProtectionDomain().getCodeSource());
Entonces sabrá con certeza de dónde viene.
La herramienta JAR Explorer es bastante útil.
Abre una ventana de GUI con dos paneles. Puede elegir un directorio, la herramienta escaneará todos los archivos JAR en ese directorio y luego le permitirá buscar una clase específica. El panel inferior se ilumina con una lista de resultados para esa clase en todos los archivos JAR escaneados.
Nueva URL de esta herramienta: https://github.com/javalite/jar-explorer – ipolevoy
Es posible que también desee echarle un vistazo a la herramienta Java JarScan.
Se puede buscar por nombre de clase y por paquete.
Ayuda mucho cuando Total Commander no está disponible y solo se permite ejecutar Java.
#! /bin/sh
path=$1
segment=$2
if [ -z "$path" ] || [ -z "$segment" ]
then
echo "Usage: $0 <path> <segment>"
exit
fi
for jar in $path/*.jar ; do echo " *** $jar *** " ; jar tf $jar| grep --color=always $segment; done;
- 1. Herramientas para encontrar todas las dependencias en Java jar
- 2. ¿Cómo busca Java eficientemente los archivos jar para las clases?
- 3. Python: obtenga la ruta relativa de todos los archivos y subcarpetas en un directorio
- 4. ¿Cómo registrar HttpHandler para todas las subcarpetas en Asp.Net?
- 5. C#: Obtener todos los archivos de imagen en la carpeta
- 6. Establecer falsa en la columna específica para todas las filas
- 7. Buscar archivos Java jar (ear, war, ...) para la clase/método
- 8. Restaurar htacces para las subcarpetas
- 9. ¿Cómo copio una carpeta y todas las subcarpetas y archivos en .NET?
- 10. SVN ya no escribe .svn en todas las subcarpetas?
- 11. Eliminar carpeta CVS de todas las subcarpetas en windows
- 12. Buscar archivos y subcarpetas en Python
- 13. Cómo cambiar todas las apariciones de una palabra en todos los archivos en un directorio
- 14. archivo Android.mk - incluyendo todos los archivos de origen en diferentes carpetas y subcarpetas
- 15. @AspectJ punto de corte para todos los métodos de una clase con anotación específica
- 16. Git ignora las subcarpetas
- 17. ¿Cómo se usan las clases de los archivos .jar?
- 18. Cómo recopilar todos los archivos en una carpeta y sus subcarpetas que coincidan con una cadena
- 19. enumerar las subcarpetas en una carpeta - Matlab (solo subcarpetas, no archivos)
- 20. Obtener la ruta relativa de los archivos en las subcarpetas del directorio actual
- 21. PowerShell Script para buscar y reemplazar todos los archivos con una extensión específica
- 22. Buscar en una carpeta y en todas sus subcarpetas archivos de cierto tipo
- 23. Cómo obtener archivos en las subcarpetas también desde el directorio
- 24. ¿Cómo controlar una carpeta con todas las subcarpetas y archivos dentro?
- 25. reemplazar nombres de todas las directiories y archivos en PS
- 26. Hacer ejecutables todos los archivos PHP (recursivamente)
- 27. Encontrar todas las clases implementando una interfaz específica
- 28. ¿Cómo puedo extraer todas las cadenas localizables de todos los archivos XIB en un archivo?
- 29. Netbeans Exportar a Jar, incluye todos los archivos de la biblioteca
- 30. Cómo agregar todos los archivos jar externos a la biblioteca en eclipse exportar a war
Usando 'unzip -l' en su lugar para 'jar' lo hizo funcionar muy rápido. 'jar' tardó 72 segundos frente a 4 segundos cuando se ejecutó con 'unzip -l' –
Vine aquí para decir exactamente esto. +1 –
Si quiero saber en qué jar se puede encontrar cierta clase, generalmente hago algo como cd ~/.m2/repository; grep -r -H "nombre de clase" *. – extraneon