2012-04-26 13 views
30

La mia applicazione è basata su Java EE.Come cercare una stringa in file JAR

Ho circa 50 giare in questa applicazione.

È possibile cercare una determinata parola chiave (in realtà voglio cercare una parola chiave BEGIN REQUEST)?

+0

Spero che questo aiuti -> http://www.unix.com/unix-dummies-questions-answers/39683-find-string-jar-file.html considerando il sistema operativo è Linux. in bocca al lupo !! –

+0

stai provando a farlo in fase di esecuzione o come parte del debug di un problema? –

+0

Cosa intendi con "parola chiave"? I file jar sono costituiti da classi java, che contengono identificatori e stringhe (e altri contenuti). Vuoi trovare le classi che definiscono o usano una stringa "INIZIA RICHIESTA"? –

risposta

69

È possibile utilizzare zipgrep su linux,

zipgrep "BEGIN REQUEST" file.jar 

Se dovete trovare la stessa cosa in numero di vasi, fare

find libdir -name "*.jar" -exec zipgrep "BEGIN REQUEST" '{}' \; 

dove libdir è una directory che contiene tutti i vasi. Il comando ricercherà ricorsivamente anche le sottodirectory.

per Windows, è possibile scaricare Cygwin e installarlo zipgrep sotto http://www.cygwin.com/

Modifica 1

Per visualizzare il nome del file che l'espressione è stata trovata si poteva fare,

find libdir | xargs -I{} sh -c 'echo searhing in "{}"; zipgrep "BEGIN REQUEST" {}'

+2

Puoi anche eseguire il rockout con zipgrep su OSX e quanto sopra funziona perfettamente. Molto apprezzato! – reevesy

+0

Salvato la mia giornata, grazie @kal! –

+0

c'è un modo per elencare da quale jar proviene ogni riga? – Bee

0

Il comando seguente mostra i risultati con il nome del file e il nome del file jar.

  1. Per trovare la stringa nell'elenco di file jar.

    find <%PATH of the Folder where you need to search%> -name "*.jar" -print -exec zipgrep "jar$|<%STRING THAT YOU NEED TO FIND>" '{}' \; 
    
  2. Per trovare il nome della classe nell'elenco del file jar.

    find . -name "*.jar" -print -exec jar tvf {} \; |grep -E "jar$|<%CLASS NAME THAT YOU NEED TO FIND>\.class" 
    
0

Ricerca all'interno di un barattolo o trovare il nome della classe che contiene un testo particolare è molto facile con WinRar ricerca. È efficiente e ha sempre funzionato per me almeno.

è sufficiente aprire qualsiasi jar in WinRar, fare clic su ".." fino a raggiungere la cartella superiore da cui si desidera avviare la ricerca (comprese le sottocartelle).

Assicuratevi di controllare le seguenti opzioni:

1.) forniscono '*' in 'i nomi dei file per trovare' campi,

2.) find selezionare le caselle di controllo' 'tipi' archivio in sottocartelle ',' trova nei file ',' trova negli archivi '.

3

Attenzione: Questa non è una risposta precisa, è solo un rapido approccio euristico. Se hai bisogno di trovare qualcosa come il nome di una classe (ad esempio, quale jar ha classe Foo?) O forse un nome di metodo, allora questo potrebbe funzionare.

grep --text 'your string' your.jar 

Questo cercherà il file jar come se fosse un testo. Questo è più veloce perché non espande l'archivio, ma è anche per questo che è meno accurato.Se hai bisogno di essere esaustivo, questo non è l'approccio che dovresti usare, ma se vuoi provare qualcosa un po 'più veloce prima di tirare fuori zipgrep questo è un buon approccio.


Da man grep,

-a, --text 
      Process a binary file as if it were text; this is equivalent 
      to the --binary-files=text option. 
0

Fastjar - molto vecchio, ma adatta alle vostre esigenze. Fastjar contiene uno strumento chiamato jargrep (o grepjar). Utilizzato allo stesso modo di grep:

> locate .jar | grep hibernate | xargs grepjar -n 'objectToSQLString' 

org/hibernate/type/EnumType.class:646:objectToSQLString 
org/hibernate/sql/Update.class:576:objectToSQLString 
org/hibernate/sql/Insert.class:410:objectToSQLString 
org/hibernate/usertype/EnhancedUserType.class:22:objectToSQLString 
org/hibernate/persister/entity/SingleTableEntityPersister.class:2713:objectToSQLString 
org/hibernate/hql/classic/WhereParser.class:1910:objectToSQLString 
org/hibernate/hql/ast/tree/JavaConstantNode.class:344:objectToSQLString 
org/hibernate/hql/ast/tree/BooleanLiteralNode.class:240:objectToSQLString 
org/hibernate/hql/ast/util/LiteralProcessor.class:1363:objectToSQLString 
org/hibernate/type/BigIntegerType.class:114:objectToSQLString 
org/hibernate/type/ShortType.class:189:objectToSQLString 
org/hibernate/type/TimeType.class:307:objectToSQLString 
org/hibernate/type/CharacterType.class:210:objectToSQLString 
org/hibernate/type/BooleanType.class:180:objectToSQLString 
org/hibernate/type/StringType.class:166:objectToSQLString 
org/hibernate/type/NumericBooleanType.class:128:objectToSQLString 
org/hibernate/type/CustomType.class:543:objectToSQLString 
org/hibernate/type/TimeZoneType.class:204:objectToSQLString 
org/hibernate/type/DateType.class:343:objectToSQLString 
org/hibernate/type/LiteralType.class:18:objectToSQLString 
org/hibernate/type/ByteType.class:189:objectToSQLString 
org/hibernate/type/LocaleType.class:259:objectToSQLString 
org/hibernate/type/CharBooleanType.class:171:objectToSQLString 
org/hibernate/type/TimestampType.class:409:objectToSQLString 
org/hibernate/type/CurrencyType.class:256:objectToSQLString 
org/hibernate/type/AbstractCharArrayType.class:219:objectToSQLString 
org/hibernate/type/FloatType.class:177:objectToSQLString 
org/hibernate/type/DoubleType.class:173:objectToSQLString 
org/hibernate/type/LongType.class:223:objectToSQLString 
org/hibernate/type/IntegerType.class:188:objectToSQLString 
0

Utilizzando vaso jfind

JFind riesce a trovare un file di classe Java in qualsiasi punto del file system, anche se è nascosto molti livelli di profondità in un barattolo all'interno di un orecchio all'interno di un zip!

http://jfind.sourceforge.net/

Problemi correlati