如何从Eclipse的config.ini文件获取字段及设置可修改的Eclipse RCP产品预启动字段
我来帮你理清这里的关键区别和解决方法——你之前遇到的问题核心是JVM系统属性和OSGi框架配置属性的差异,这也是为啥VM参数能通过System.getProperty拿到,但config.ini里的字段不行。
一、正确读取config.ini中的字段
Eclipse RCP基于OSGi框架,config.ini里的常规配置属于OSGi框架的属性,而非JVM的系统属性,所以不能直接用System.getProperty获取。你需要用OSGi相关的API来读取:
1. 在Bundle的Activator类中读取
如果你的代码在某个Bundle的Activator里,直接用BundleContext就能获取:
@Override public void start(BundleContext context) throws Exception { super.start(context); // 读取config.ini中的your.custom.key字段 String customValue = context.getProperty("your.custom.key"); // 后续处理逻辑 }
2. 在非Activator类中读取
如果代码不在Activator里,可以通过FrameworkUtil获取当前类所属Bundle的上下文:
import org.osgi.framework.Bundle; import org.osgi.framework.FrameworkUtil; public class MyService { public void readConfig() { Bundle bundle = FrameworkUtil.getBundle(MyService.class); if (bundle != null && bundle.getBundleContext() != null) { String customValue = bundle.getBundleContext().getProperty("your.custom.key"); } } }
3. 用Eclipse Platform API读取
如果你依赖了org.eclipse.core.runtime插件,也可以用Platform类简化操作:
import org.eclipse.core.runtime.Platform; String customValue = Platform.getConfiguration().getProperty("your.custom.key");
二、设置可修改的RCP产品预启动字段
要让字段在RCP产品启动前生效,并且允许后续修改,按以下步骤操作:
1. 在.product配置中添加默认字段
打开你的RCP产品配置文件(.product),切换到Configuration标签页:
- 找到Properties区域,点击「Add」按钮
- 输入键值对(比如
app.default.timeout=30),点击确定 - 构建产品后,这些字段会自动写入安装目录下
configuration/config.ini文件中
2. 允许用户修改字段
用户要修改这些配置时,只需找到产品安装目录下的configuration/config.ini文件,直接编辑对应的键值对,重启RCP产品后修改就会生效。
3. 可选:让字段同时支持JVM参数覆盖
如果你希望用户既能通过config.ini配置,也能通过启动参数临时覆盖,可以在config.ini中添加-D前缀的配置(或者在产品快捷方式中添加VM参数):
比如在config.ini中写:
-Dapp.default.timeout=30
这时候这个值会成为JVM系统属性,你可以用System.getProperty("app.default.timeout")获取,同时用户也能通过启动时添加-Dapp.default.timeout=60来临时覆盖config.ini的设置。
关键总结
- VM参数属于JVM系统属性,用
System.getProperty读取;config.ini的常规配置属于OSGi框架属性,用BundleContext或Platform API读取 - 在
.product的Configuration标签中添加的属性,会自动写入config.ini,作为产品启动的默认配置 - 用户直接编辑config.ini即可修改预启动字段,重启生效
内容的提问来源于stack exchange,提问作者Andrew

