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

时间:2016-03-12 15:40:04

标签: java eclipse binding classpath abstract-syntax-tree

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

1 个答案:

答案 0 :(得分:0)

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

这里是我发布的链接的剪切示例:

    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类编译为.class文件。因此,您必须验证您正在使用的所有JAVA代码都包含在要添加到类路径的其中一个jar中。就像你现在一样,默认情况下,当你创建一个JAVA项目时,eclipse总是将所有JAVA jar添加到类路径中。

要确定JAVA文件的位置,您可以查看我找到的代码:

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

您可以获得有关最后一个here的更多信息。