我需要以某种方式获取正在运行的 Eclipse 4 应用程序的命令行参数。我正在开发一个基于 Eclipse 4 RCP 的小型应用程序,但我认为,这个问题更常见。我无法找到,如何从命令行参数的插件的产品代码中获取,应用程序已被执行。
我需要使用自定义命令行参数将信息传递给我的代码。有人知道提示吗?
由于 E4 使用 Equinox 作为运行时,您可以使用 Platform 类来获取应用程序参数。
Platform.getApplicationArgs()
请参阅 Javadoc: http ://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Findex.html
我懂了。它不是那么直观,但它对我有用。有一个实现IApplicationContext
接口的实例。(接口取决于org.eclipse.equinox.app
.) 实例可以通过注入机制访问。该方法getArguments()
返回一个地图。但它不返回某些命令行参数及其值的映射。它返回一些map,它在key下"application.args"
存储了一个数组。示例:
@PostConstruct
public void createControls(Composite parent, HtmlEditorService editorService, IApplicationContext iac) {
System.out.println(iac.getArguments().get("application.args").getClass().getCanonicalName());
...
}
然后打印出来java.lang.String[]
。但是,该数组仅包含我的自定义参数,而不是所有参数。幸运的是,这对我来说并不重要。我只需要获取我的自定义参数。
插件激活器的附加提示
public class Aktivator implements BundleActivator {
@Override
public void start(BundleContext context) throws Exception {
ServiceReference<?> ser = context.getServiceReference(IApplicationContext.class);
IApplicationContext iac = (IApplicationContext)context.getService(ser);
System.out.println(iac.getArguments().get("application.args").getClass().getCanonicalName());
}
@Override
public void stop(BundleContext context) throws Exception {
}
}