Eclipse 資源模型根介面 org.eclipse.core.resources.IResource,提供 refreshLocal(int depth, IProgressMonitor monitor) 觸發本地資源同步。
| 介面/類別 | 繼承鏈 | 適用場景 |
|---|---|---|
| IFile | IResource | 單一檔案刷新 |
| IFolder | IContainer → IResource | 資料夾遞迴刷新 |
| IProject | IContainer → IResource | 整個專案刷新 |
| IWorkspaceRoot | IContainer → 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 執行緒(如 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();
build() → 凍結介面,甚至死結。project.isOpen() → 拋 CoreException。monitor 傳 null → 無法取消、無進度回報,建議用 SubProgressMonitor 分割進度。