任何给定源代码的 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 上获得更多信息。
我正在使用 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 上获得更多信息。