Eclipse插件开发如何通过代码调用内置运行按钮执行指定Java类
Eclipse插件自定义按钮触发指定Java类运行解决方案
完全可以通过Eclipse官方提供的Launch框架API实现该需求,不需要模拟点击界面上的运行按钮,直接调用内核接口即可触发指定Java类的执行。
前置准备:添加插件依赖
在你插件项目的MANIFEST.MF的依赖项中添加以下插件:
- org.eclipse.debug.core
- org.eclipse.jdt.launching
- org.eclipse.jdt.core
- org.eclipse.core.runtime
- org.eclipse.debug.ui
核心实现代码
替换原有按钮点击事件中的逻辑即可,完整示例如下:
@PostConstruct public void createPartControl(Composite parent) { Button button = new Button(parent, SWT.PUSH); button.setText("启动指定Java类"); button.addSelectionListener((SelectionListener) new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { try { // 按需修改为实际的目标项目名、主类全限定名 String targetProjectName = "你的Java项目名"; String targetMainClass = "com.xxx.YourMainClass"; // 获取目标Java项目 IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(targetProjectName); IJavaProject javaProject = JavaCore.create(project); if (!javaProject.exists()) { return; } // 创建Java应用启动配置 ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); ILaunchConfigurationType javaLaunchType = launchManager.getLaunchConfigurationType(IJavaLaunchConfigurationConstants.ID_JAVA_APPLICATION); ILaunchConfigurationWorkingCopy launchConfig = javaLaunchType.newInstance(null, "自定义启动-" + targetMainClass); // 配置启动参数 launchConfig.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, targetProjectName); launchConfig.setAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, targetMainClass); // 可选配置:程序参数、VM参数 // launchConfig.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, "arg1 arg2"); // launchConfig.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, "-Xms128m -Xmx512m"); // 触发运行 DebugUITools.launch(launchConfig.doSave(), ILaunchManager.RUN_MODE); } catch (CoreException ex) { ex.printStackTrace(); } } }); }
注意事项
- 目标Java类必须包含可执行的
main方法,所在项目无编译错误 - 如果需要复用已存在的启动配置,可以遍历
launchManager.getLaunchConfigurations()匹配到对应配置后直接调用DebugUITools.launch启动即可 - 启动方法的第二个参数改为
ILaunchManager.DEBUG_MODE即可触发调试模式运行
内容的提问来源于stack exchange,提问作者Kaviarasu
相关产品推荐
相关产品推荐

