使用 JDT 在独立的 Java 应用程序中提取 IcompilationUnits



我正在编写一个普通的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 中,索引是在工作区生成期间创建的。这意味着没有工作区,就没有开箱即用的搜索引擎使用方法。

理论上可以实现自己的索引,但绝对不建议这样做。

还剩下两个选项:

  1. 如注释中所述,使用您自己的现有类遍历,或者

  2. 让您的应用程序在后台初始化一个工作区,将代码作为真正的 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的启动配置,然后在选项卡上选择MainRun an application: [No Application] - Headless Mode

最新更新