You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eclipse 4迁移:如何通过编程方式保存workbench.xmi?

Eclipse 4 RCP 透视图状态保存至 workbench.xmi 解决方案

1. 定位 workbench.xmi 文件路径

Eclipse 4 中,workbench.xmi 默认存储在工作区的 .metadata/.plugins/org.eclipse.e4.workbench/ 目录下。可以通过 Eclipse Platform API 获取工作区根路径,拼接得到完整路径:

import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Platform;

// 获取工作区根路径
IPath workspaceRoot = Platform.getInstanceLocation().getURL().getPath();
// 拼接得到 workbench.xmi 完整路径
IPath workbenchXmiPath = workspaceRoot.append(".metadata")
                                    .append(".plugins")
                                    .append("org.eclipse.e4.workbench")
                                    .append("workbench.xmi");

2. 保存透视图状态到 workbench.xmi

Eclipse 4 采用 EMF(Eclipse Modeling Framework)管理工作台模型,需通过操作 EMF 模型来保存透视图状态:

方式一:通过 E4 服务上下文获取模型并保存

如果在 E4 组件(如 Handler、Part 等)中,可以直接获取 MApplication 实例并操作:

import org.eclipse.e4.ui.internal.workbench.E4Workbench;
import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.e4.ui.model.application.ui.basic.MPerspective;
import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
import org.eclipse.emf.ecore.resource.Resource;
import java.io.IOException;
import java.util.Collections;

// 获取 MApplication 实例
MApplication app = E4Workbench.getServiceContext().get(MApplication.class);

// 获取当前活动窗口与透视图
MWindow activeWindow = app.getActiveWindow();
MPerspective activePerspective = activeWindow.getActivePerspective();

// 此处可对透视图状态进行自定义修改(如布局、部件状态等)
// ...

// 获取模型对应的 Resource 并保存
Resource resource = app.eResource();
try {
    // 保存模型到 workbench.xmi
    resource.save(Collections.emptyMap());
} catch (IOException e) {
    // 处理保存异常
    e.printStackTrace();
}

方式二:手动加载并操作 EMF 模型

如果不在 E4 组件上下文环境中,可通过 EMF 的 ResourceSet 手动加载 workbench.xmi 文件:

import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.common.util.URI;
import org.eclipse.e4.ui.model.application.MApplication;
import java.io.IOException;

// 构建 workbench.xmi 的文件 URI
URI xmiUri = URI.createFileURI(workbenchXmiPath.toOSString());

// 创建 ResourceSet 并加载模型
ResourceSet resourceSet = new ResourceSetImpl();
Resource resource = resourceSet.getResource(xmiUri, true);

// 获取 MApplication 实例
MApplication app = (MApplication) resource.getContents().get(0);

// 操作透视图模型(如修改状态、保存布局)
// ...

// 保存模型
try {
    resource.save(null);
} catch (IOException e) {
    e.printStackTrace();
}

注意事项

  • 操作 EMF 模型需确保在 UI 线程中执行,避免并发修改导致的异常。
  • 直接修改 workbench.xmi 后,若需即时生效,可能需要触发工作台模型的刷新(如通过 EModelService 相关方法)。

内容的提问来源于stack exchange,提问作者Kildary Klein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 13:44:58