我正在编写一个普通的Java应用程序,想要提取输入项目的所有ICompilationUnit(这不是必需的( 由Eclipse开发(。由于我没有开发 Eclipse 插件,因此我无法使用以下代码来提取 ICompilationUnit:
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IPath path = Path.fromOSString(source.getAbsolutePath());
IFile file = workspace.getRoot().getFileForLocation(path);
ICompilationUnit compilationUnit = (ICompilationUnit) JavaCore.create(file);
目前,我正在使用以下代码来解析输入的 Java 文件。(str 包含输入 java 文件的源代码(
ASTParser parser = ASTParser.newParser(AST.JLS12);
parser.setSource(str.toCharArray());
parser.setKind(ASTParser.K_COMPILATION_UNIT);
CompilationUnit cu = (CompilationUnit) parser.createAST(null);
但是,下面的代码返回 null,因为它不是从 Java 元素创建的。
ICompilationUnit icu = (ICompilationUnit)compilationUnit.getJavaElement();
问:有没有办法在普通的Java应用程序中提取ICompilationUnits?
JDT 搜索引擎需要一个索引。在 IDE 中,索引是在工作区生成期间创建的。这意味着没有工作区,就没有开箱即用的搜索引擎使用方法。
理论上可以实现自己的索引,但绝对不建议这样做。
还剩下两个选项:
-
如注释中所述,使用您自己的现有类遍历,或者
-
让您的应用程序在后台初始化一个工作区,将代码作为真正的 Java 项目导入其中。在构建该工作台后,搜索引擎应该可用。所有这些都可能发生在无头应用程序中,无需启动 Eclipse UI。
有关选项(2(的灵感,您可以从这里开始:
- PDE的CoreTestApplication,它是用于运行JDT自己的测试的无头应用程序。工作区在使用
-data
命令行参数传递的位置中自动可用。 - JDT的AbstractJavaModelTests,它提供了大量的实用程序,用于以编程方式创建和配置Java项目。
- AbstractJavaModelTests的子类,其中包含大量如何使用这些Java项目的示例,包括搜索。
如果你想看到这一切,我建议你设置一个在源代码中带有JDT和PDE项目的工作区。最简单的方法是为此使用 Oomph。
如果选择任何测试类,将运行上述 CoreTestApplication,调用Run as > Run configurations...
然后创建类型为JUnit Plug-in Test
的启动配置,然后在选项卡上选择Main
Run an application: [No Application] - Headless Mode
。