使用命令行工具列出当前类path中的可用类

我需要使用默认的JRE / JDK命令行工具来检查当前目录是否有特定的类。

我可以构build自己的类来列出它,或者检查当前目录和当前CLASSPATH环境variables是否可以访问特定的类,但是此选项不可用,因为我需要检查特定的类名是否可用于受保护的生产环境(只读)。

你可以使用javap

 $ javap java.lang.String Compiled from "String.java" public final class java.lang.String implements java.io.Serializable [...] $ javap no.such.Class Error: class not found: no.such.Class 

您可以使用java命令的-verbose选项并搜索特定类的完全限定名称。

 $ java -verbose -jar MyProgram.jar |  grep“java.lang.String”
 [从/Library/Java/.../Contents/Home/jre/lib/rt.jar加载的java.lang.String]
 [从/Library/Java/.../Contents/Home/jre/lib/rt.jar加载java.lang.StringBuffer]
 ...

附录: 我想检查一个环境的类可用性。

如果从java命令行运行,则将搜索-classpath选项或CLASSPATH环境变量中指定的路径。 如果您从JAR运行,则清单的Class-Path属性将取代这些设置。

如果您正在尝试查找可能无法以这些方式访问的必需JAR,则必须搜索文件系统。 我使用findjargrep的组合,通常集中在系统属性中定义的路径,如java.endorsed.dirsjava.ext.dirs ; 这里显示了几个相关的方法。