【问题标题】:Listing available classes in current classpath using a command line tool使用命令行工具列出当前类路径中的可用类
【发布时间】:2015-01-25 08:42:13
【问题描述】:

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

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

【问题讨论】:

  • 如果您从 JAR 运行,请检查清单的 Class-Path 属性。
  • 这就是@trashgod 的重点。我想检查一个环境的类可用性,而不是它是否存在于特定的 jar 中。

标签: java linux classpath


【解决方案1】:

你可以使用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

【讨论】:

  • 可以这样做,以防您试图在特定的 jar 文件中查找类。 javap -cp "file1.jar:file2.jar" com.example.ClassYouLookFor
【解决方案2】:

您可以使用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 属性(对于 example)会取代这些设置。

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

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-08
    • 1970-01-01
    相关资源
    最近更新 更多