首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

Eclipse 插件開發:實作資源刷新與專案重建

     編輯:J2EE

核心介面:IResource

Eclipse 資源模型根介面 org.eclipse.core.resources.IResource,提供 refreshLocal(int depth, IProgressMonitor monitor) 觸發本地資源同步。

可呼叫 refreshLocal 的具體類型

介面/類別繼承鏈適用場景
IFileIResource單一檔案刷新
IFolderIContainer → IResource資料夾遞迴刷新
IProjectIContainer → IResource整個專案刷新
IWorkspaceRootIContainer → IResource整個工作區刷新

刷新程式碼範例

// 取得 IProject
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject("MyProject");
if (project.exists() && project.isOpen()) {
    project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
}
  • DEPTH_INFINITE:遞迴所有子層級。
  • DEPTH_ONE:僅第一層。
  • DEPTH_ZERO:僅資源本身。

專案清理/重建

// 清理並完整建構單一專案
IProject project = ...;
project.build(IncrementalProjectBuilder.CLEAN_BUILD, monitor);

// 清理並建構整個工作區
ResourcesPlugin.getWorkspace().build(IncrementalProjectBuilder.CLEAN_BUILD, monitor);
  • CLEAN_BUILD:等同 IDE「Clean」→「Build」。
  • INCREMENTAL_BUILD:增量建構(預設)。
  • AUTO_BUILD:自動建構觸發。

進階:非 UI 執行緒安全呼叫

// 必須在非 UI 執行緒(如 Job、Worker)執行
Job job = new Job("Refresh & Build") {
    @Override
    protected IStatus run(IProgressMonitor monitor) {
        IProject project = ...;
        project.refreshLocal(IResource.DEPTH_INFINITE, monitor);
        project.build(IncrementalProjectBuilder.CLEAN_BUILD, monitor);
        return Status.OK_STATUS;
    }
};
job.schedule();

常見坑點

  • ❌ 在 UI 執行緒呼叫 build() → 凍結介面,甚至死結。
  • ❌ 未檢查 project.isOpen() → 拋 CoreException。
  • ❌ monitor 傳 null → 無法取消、無進度回報,建議用 SubProgressMonitor 分割進度。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved