杰瑞科技汇

Eclipse Java API如何高效使用?

Eclipse for Java 本身不是一个独立的软件,它是一个平台(Eclipse Platform)上的一个插件(Eclipse Java Development Tools, 简称 JDT)

Eclipse Java API如何高效使用?-图1
(图片来源网络,侵删)

当我们在讨论 "Eclipse Java 的 API" 时,我们实际上在讨论两个层面:

  1. JDT API (Java Development Tools API):这是最核心、最直接的 "Eclipse Java API",它专门用于操作 Java 代码本身,比如解析 Java 文件、获取语法树、进行代码分析、重构、编译等,如果你要写一个能“理解”和“修改”Java 代码的插件,这个是你的首选。
  2. *Eclipse Platform API (org.eclipse.)**:这是更底层的 Eclipse 框架 API,JDT 就是构建在这个框架之上的,如果你想写一些通用的插件,比如在 Eclipse 界面上添加一个新菜单、视图、对话框,或者操作文件系统、管理项目资源等,你就会用到这个 API。

下面我将从这两个层面为你详细介绍,并提供学习资源和示例。


JDT API (Java Development Tools API)

JDT API 是 Java 开发者在 Eclipse 中进行二次开发最常接触的 API,它提供了一套强大的模型来表示和管理 Java 代码。

核心包和关键类:

JDT API 主要分布在以下几个包中:

Eclipse Java API如何高效使用?-图2
(图片来源网络,侵删)
包名 核心功能 关键类/接口
org.eclipse.jdt.core 核心模型,提供对 Java 项目、文件、元素的编程访问,这是 JDT 的基石。 IJavaProject, ICompilationUnit (代表一个 .java 文件), IClassFile (代表一个 .class 文件), IMethod, IField, IType (代表一个类/接口/枚举)
org.eclipse.jdt.core.dom DOM (Document Object Model) API,用于分析和修改 Java 源代码的抽象语法树,非常适合做代码分析、静态检查、代码生成等。 AST, ASTParser, CompilationUnit, TypeDeclaration, MethodDeclaration, Block
org.eclipse.jdt.ui UI 相关,用于在 Eclipse 用户界面中与 Java 元素进行交互,打开编辑器、高亮显示代码等。 JavaUI, EditorUtility
org.eclipse.jdt.core.refactoring 重构 API,用于执行各种重构操作,如重命名方法、提取方法等。 RefactoringCore, RenameRefactoring

一个简单的 JDT API 示例:读取一个 Java 文件并打印其所有方法名

假设你想写一个 Eclipse 插件,当用户选中一个 Java 文件时,插件能列出该文件中所有方法的名称。

步骤:

  1. 获取用户当前在编辑器中打开的 IJavaElement
  2. 将其转换为 ICompilationUnit (Java 源文件)。
  3. 使用 ASTParser 来解析这个文件,生成 CompilationUnit (DOM)。
  4. 遍历 DOM 树,找到所有的方法声明并打印名称。

代码片段:

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.core.dom.*;
import org.eclipse.jface.operation.IRunnableWithProgress;
// ... 在一个实现了 IRunnableWithProgress 的类中 ...
@Override
public void run(IProgressMonitor monitor) {
    // 1. 假设我们已经获取到了当前选中的 ICompilationUnit
    ICompilationUnit unit = ...; 
    if (unit == null) {
        System.out.println("No Java file selected.");
        return;
    }
    // 2. 创建 ASTParser
    ASTParser parser = ASTParser.newParser(AST.JLS13); // 使用你目标 Java 版本的语法
    parser.setSource(unit);
    parser.setResolveBindings(true); // 解析绑定,可以获取到类型信息等
    // 3. 解析并获取 CompilationUnit
    CompilationUnit cu = (CompilationUnit) parser.createAST(null);
    // 4. 遍历 AST 树查找方法
    cu.accept(new ASTVisitor() {
        @Override
        public boolean visit(MethodDeclaration node) {
            // 打印方法名
            System.out.println("Found method: " + node.getName().getIdentifier());
            return super.visit(node);
        }
    });
}

Eclipse Platform API (通用框架)

JDT 插件也是 Eclipse 插件,所以它必然要使用 Eclipse 平台的 API 来构建用户界面和与其他部分交互。

核心包和关键类:

包名 核心功能 关键类/接口
org.eclipse.core.resources 资源管理,操作项目、文件、文件夹,这是所有插件的基础。 IProject, IFile, IFolder, IWorkspace, IWorkspaceRoot
org.eclipse.ui 工作台核心,管理窗口、视图、编辑器、操作等。 IWorkbench, IWorkbenchWindow, IViewPart, IEditorPart, IAction
org.eclipse.jface 基础 UI 组件,提供对话框、向导、查看器等。 MessageDialog, WizardDialog, TableViewer, TreeViewer
org.eclipse.ui.part UI 集成,帮助你将自定义的视图、编辑器集成到 Eclipse 工作台中。 ViewPart, EditorPart
org.eclipse.core.runtime 运行时核心,提供插件生命周期、日志、扩展点等基础服务。 Plugin, IExtension, IConfigurationElement, IStatus

一个简单的 Platform API 示例:创建一个新菜单项

假设你想在 Eclipse 的 "File" 菜单下添加一个 "Say Hello" 选项,点击后弹出一个对话框。

步骤:

  1. plugin.xml 文件中定义一个 Contribution (扩展),将你的操作添加到 "File" 菜单。
  2. 创建一个 Java 类实现 IActionDelegate 接口,定义菜单项被点击时的行为。
  3. plugin.xml 中将这个类与你定义的操作关联起来。

plugin.xml (片段):

<extension
      point="org.eclipse.ui.commands">
   <command
         id="com.example.myplugin.helloCommand"
         name="Say Hello">
   </command>
</extension>
<extension
      point="org.eclipse.ui.handlers">
   <handler
         class="com.example.myplugin.HelloHandler"
         commandId="com.example.myplugin.helloCommand">
   </handler>
</extension>
<extension
      point="org.eclipse.ui.menus">
   <menu
         id="file.menu"
         label="File">
      <separator
            name="file.import.separator"
            visible="true">
      </separator>
      <menuContribution
            locationURI="menu:file.menu?after=file.import.separator">
         <command
               commandId="com.example.myplugin.helloCommand"
               label="Say Hello"
               style="push">
         </command>
      </menuContribution>
   </menu>
</extension>

HelloHandler.java (代码片段):

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.ui.handlers.HandlerUtil;
public class HelloHandler extends AbstractHandler {
    @Override
    public Object execute(ExecutionEvent event) throws ExecutionException {
        // 获取当前活动窗口
        // 弹出一个消息对话框
        MessageDialog.openInformation(
            HandlerUtil.getActiveShell(event),
            "Hello Plugin",
            "Hello, Eclipse World!");
        return null;
    }
}

如何学习和查阅 Eclipse API?

  1. Eclipse PDE 帮助文档 (最重要!)

    • 当你安装了 Eclipse PDE (Plug-in Development Environment) 后,帮助文档中会包含 "Eclipse Platform Plug-in Developer's Guide""JDT Core" 等章节。
    • 这是最权威、最详细的 API 文档和教程。强烈建议从这里开始
    • 在 Eclipse 中,打开 Help -> Help Contents 即可访问。
  2. Javadoc (API Reference)

    • 对于已经安装的 Eclipse,你可以直接在代码中按 F2Shift + F2 来查看某个类或方法的 Javadoc 文档。
    • 也可以在 Eclipse 的安装目录下找到 plugins 文件夹,里面包含了许多 JAR 文件,它们就是 Eclipse 源代码和 Javadoc 的来源。
  3. Eclipse 示例代码

  4. 开源项目

    • 阅读一些著名的 Eclipse 插件的源码是学习 API 的最佳方式之一。
      • Checkstyle (代码风格检查插件)
      • FindBugs / SpotBugs (静态代码分析插件)
      • Lombok (虽然它现在是一个独立项目,但其早期是作为 Eclipse 插件存在的)
      • Git integration for Eclipse (Git 客户端插件)
API 类型 主要用途 核心包 学习重点
JDT API 操作 Java 代码:分析、修改、编译、重构。 org.eclipse.jdt.core, org.eclipse.jdt.core.dom 如何获取 ICompilationUnit,如何解析 AST,如何遍历和修改语法树。
Platform API 构建插件界面和功能:管理项目、添加菜单/视图、处理文件等。 org.eclipse.core.resources, org.eclipse.ui, org.eclipse.jface 如何使用 plugin.xml 定义扩展,如何实现 HandlerViewPart

对于大多数 Java 如果你想要增强或创建与 Java 代码深度相关的工具,JDT API 是你的主战场,而如果你想创建一个通用的 Eclipse 插件,或者让你的 Java 工具拥有更好的用户界面,Platform API 就是必不可少的。

从阅读官方的 PDE 帮助文档开始,结合动手实践,是掌握 Eclipse API 最有效的方法。

分享:
扫描分享到社交APP
上一篇
下一篇