任何给定源代码的 class 路径是什么?

What is the class path of any given source code?

我正在使用 AST 解析器反编译 apk 并分析它们的源代码(不在 Eclipse 环境中工作)。要创建绑定,我需要 setEnvironment(),但我不知道要将什么作为 class 路径。每组源代码都一样吗?我将使用什么作为给定项目的 class 路径字符串?

似乎您必须包含您使用的所有 java 文件的 class 路径 - 我指的是 jar 和您自己的 java 文件。我不知道这是否是您的实际问题,因为您必须提供更多相关信息。但是如果你只是想弄清楚方法中的内容,我找到了一个例子 here.

这里是我发布的 link 中截取的示例:

    String path ="C:\Users\pc\workspace\asttester\src\test\Apple.java";
    File file = new File(path);
    String str = Util.readFileToString(file);

    ASTParser parser = ASTParser.newParser(AST.JLS8);
    parser.setResolveBindings(true);
    parser.setKind(ASTParser.K_COMPILATION_UNIT);

    parser.setBindingsRecovery(true);

    Map options = JavaCore.getOptions();
    parser.setCompilerOptions(options);

    String unitName = "Apple.java";
    parser.setUnitName(unitName);

    String[] sources = { "C:\Users\pc\workspace\asttester\src" }; 
    String[] classpath = {"C:\Program Files\Java\jre1.8.0_25\lib\rt.jar"};

    // sources is the source dir of all your java files
    // classpath is the java jar containing all the needed classes
    parser.setEnvironment(classpath, sources, new String[] { "UTF-8"}, true);
    parser.setSource(str.toCharArray());

    CompilationUnit cu = (CompilationUnit) parser.createAST(null);

从上面的例子可以看出,方法定义是:

public void setEnvironment(String[] classpathEntries,
                       String[] sourcepathEntries,
                       String[] encodings,
                       boolean includeRunningVMBootclasspath)

所以,就像我说的,你需要在编译时添加你需要的所有 java jar。否则它不会将 java classes 编译成 .class 文件。因此,您必须验证您正在使用的所有 JAVA 代码是否包含在您添加到 class 路径的其中一个 jar 中。就像你现在一样,默认情况下,当你创建一个 JAVA 项目时,eclipse 总是将所有 JAVA jar 添加到 class 路径。

要确定 JAVA 文件在哪里,您可以看一下我找到的这段代码:

Class klass = String.class;
URL location = klass.getResource('/'+klass.getName().replace('.', '/')+".class");

您可以在最后一个 here 上获得更多信息。