通过命令行在类路径(包括JARS)中搜索或列出Java类

szx*_*nyc 3 java linux

我真的很喜欢javap命令行程序来反编译和检查类,但是大多数时候我无法重新收集类的标准包名称:

javap java.nio.file.Files
Run Code Online (Sandbox Code Playgroud)

如果我不知道软件包名称,那么我会使用Google。是否有内置的Java程序或实用的Linux命令可以搜索并列出给定类名的所有匹配包?

yǝs*_*ǝla 5

搜索所有罐子:

find <path> -name "*.jar" -exec jar -tf {} \; | grep "/<classname>\.class\$"
Run Code Online (Sandbox Code Playgroud)

例:

find ~/.ivy2/ -name "*.jar" -exec jar -tf {} \; | grep "/Filter\.class\$"
Run Code Online (Sandbox Code Playgroud)

输出:

javax/servlet/Filter.class
javax/servlet/Filter.class
javax/servlet/Filter.class
org/scalatest/Filter.class
org/scalatest/Filter.class
org/fusesource/scalate/filter/Filter.class
org/fusesource/scalate/filter/Filter.class
scala/tools/scalap/scalax/rules/Filter.class
org/apache/ivy/util/filter/Filter.class
com/foursquare/fongo/impl/Filter.class
com/foursquare/fongo/impl/Filter.class
com/foursquare/fongo/impl/Filter.class
shapeless/Filter.class
Run Code Online (Sandbox Code Playgroud)

我个人并不喜欢这种解决方案。

要搜索所有类文件,只需使用find

find <path> -name "*.class"
Run Code Online (Sandbox Code Playgroud)