java-如何在JAR文件中搜索字符串
我的应用程序基于Java EE构建。
我在此应用程序中大约有50个罐子。
是否可以搜索特定的关键字(实际上我想搜索关键字BEGIN REQUEST)?
user1253847 asked 2020-02-15T14:02:16Z
8个解决方案
105 votes
您可以在Linux或OSX上使用zipgrep:
zipgrep "BEGIN REQUEST" file.jar
如果您想搜索多个罐子,请执行
find libdir -name "*.jar" -exec zipgrep "BEGIN REQUEST" '{}' \;
其中libdir是包含所有jar的目录。 该命令也会递归搜索子目录。
对于Windows,您可以下载cygwin并在其下安装zipgrep:[http://www.cygwin.com/]
编辑1
要查看找到表达式的文件名,可以执行以下操作:
find libdir | xargs -I{} sh -c 'echo searhing in "{}"; zipgrep "BEGIN REQUEST" {}'
Kalpak Gadre answered 2020-02-15T14:02:47Z
4 votes
警告:这不是一个准确的答案,只是一个快速的启发式方法。 如果您需要查找某个类的名称(例如,哪个jar具有Foo类?)或某个方法的名称,则可以使用该名称。
grep --text 'your string' your.jar
这将搜索jar文件,就好像它是文本一样。 这样比较快,因为它不会扩展存档,但这也是为什么它不那么准确的原因。 如果您需要详尽无遗,那么这不是您应该使用的方法,但是如果您想更快地尝试一些方法,然后再退出-a, --text
Process a binary file as if it were text; this is equivalent
to the --binary-files=text option.,这是一个很好的方法。
从-a, --text
Process a binary file as if it were text; this is equivalent
to the --binary-files=text option.,
-a, --text
Process a binary file as if it were text; this is equivalent
to the --binary-files=text option.
Captain Man answered 2020-02-15T14:03:21Z
2 votes
在android中,我不得不在jar和aar文件中搜索某个字符串,而我一直在寻找这是我在mac上的实现:
find . -name "*.jar" -o -name "*.aar" | xargs -I{} zipgrep "AssestManager" {}
本质上是查找当前目录中的所有jar和aar文件(默认情况下find命令是递归的),将结果通过管道传递给zipgrep并通过xargs将每个文件名作为参数应用。 末尾的括号告诉xargs将从find命令获得的文件名放在哪里。 如果要搜索整个主目录,只需更改find即可。 找到〜
j2emanue answered 2020-02-15T14:03:47Z
1 votes
使用WinRar搜索非常容易在jar内进行搜索或查找包含特定文本的类名。 它高效并且至少对我有用。
只需在WinRar中打开任何jar,单击“ ..”,直到到达您要开始搜索的顶部文件夹(包括子文件夹)。
确保检查以下选项:
1.)在“要查找的文件名”,“存档类型”字段中提供“ *”
2.)选中“在子文件夹中查找”,“在文件中查找”,“在档案中查找”复选框。
tigersagar answered 2020-02-15T14:04:25Z
0 votes
以下命令显示带有文件名和jar文件名的结果。
在jar文件列表中查找字符串。
find -name "*.jar" -print -exec zipgrep "jar$|" '{}' \;
在jar文件列表中查找类名。
find . -name "*.jar" -print -exec jar tvf {} \; |grep -E "jar$|\.class"
JKI answered 2020-02-15T14:05:02Z
0 votes
Fastjar-很老,但适合您的需求。 Fastjar包含名为jargrep(或grepjar)的工具。 使用与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
AndreyT answered 2020-02-15T14:05:23Z
0 votes
使用jfind jar
JFind可以在文件系统上的任何位置找到Java类文件,即使 它被藏在拉链的耳朵内的一个罐子里深处的许多层中!
[http://jfind.sourceforge.net/]
liams62217 answered 2020-02-15T14:05:52Z
0 votes
在alvinalexander.com上找到以下脚本。 它很简单,但对搜索当前目录中的所有jar文件很有用
#!/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
用您的查询(即类名)替换“ codehaus ...”。
样本输出:
$ ./searchjars.sh
Looking in ./activation-1.1.jar ...
Looking in ./commons-beanutils-1.7.0.jar ...
Looking in ./commons-codec-1.3.jar ...
Looking in ./commons-pool.jar ...
Looking in ./jaxen-1.1-beta-9.jar ...
Looking in ./jdom-1.0.jar ...
Looking in ./mail-1.4.jar ...
Looking in ./xbean-2.2.0.jar ...
Looking in ./xbean-spring-2.8.jar ...
Looking in ./xfire-aegis-1.2.6.jar ...
Looking in ./xfire-annotations-1.2.6.jar ...
Looking in ./xfire-core-1.2.6.jar ...
Looking in ./xfire-java5-1.2.6.jar ...
Looking in ./xfire-jaxws-1.2.6.jar ...
Looking in ./xfire-jsr181-api-1.0-M1.jar ...
Looking in ./xfire-spring-1.2.6.jar ...
==> Found "codehaus/xfire/spring" in ./xfire-spring-1.2.6.jar
Looking in ./XmlSchema-1.1.jar ...
Michael C Good answered 2020-02-15T14:06:21Z