1 概要
Eclipse依然是开发java的主流IDE之一, 技术公司如要提升开发侧的效率或者为产品吸引开发者,可以开发Eclipse插件。
本文将介绍Eclipse插件开发的一些点。
2 插件开发
2.1 按钮扩展
2.1.1 扩展菜单
扩展菜单扩展点org.eclipse.ui.menus,指定命令id。
2.1.2 实现命令
处理类继承AbstractHandler
2.2 偏好扩展
2.2.1 扩展页面
偏好页面扩展点:org.eclipse.ui.preferencePages。
2.2.2 页面实现
2.2.3 初始化偏好
插件激活的时候初始化:
2.3 向导扩展
向导提供创建项目或文件的指引式操作。
2.3.1 扩展配置
在扩展点配置org.eclipse.ui.newWizards。
2.3.2 实现向导
继承向导父类,实现向导接口。
2.3.3 实现页面
2.4 编辑器扩展
2.4.1 扩展配置
在扩展点配置org.eclipse.ui.editors。
2.4.2 编辑器实现
2.5 右键菜单
2.5.1 扩展配置
扩展扩展点 org.eclipse.ui.popupMenus, 配置如下,注意几个点,objectClass 指定项目结构资源树每个节点的对象的所属类,nameFilter 可以过滤后缀。action 配置多个,i就出现多个右键菜单。
<extension point="org.eclipse.ui.popupMenus">
<objectContribution
id="rcp.actions"
objectClass="org.eclipse.core.resources.IFile"
nameFilter="*.html">
<action
id="actions.OpenUrlAction"
label="打开页面"
class="actions.OpenUrlAction"
menubarPath="additions"
enablesFor="1">
</action>
<action
id="actions.CopyUrlAction"
label="复制地址"
icon="icons/copy_url.png"
class="ctions.CopyUrlAction"
menubarPath="additions"
enablesFor="1">
</action>
</objectContribution>
</extension>
2.5.2 实现处理类
右键菜单的逻辑实现接口 IObjectActionDelegate ,处理run方法。如下:
public class OpenUrlAction implements IObjectActionDelegate {
private TreeSelection selection;
/**
* 获取selection.
*
* @return the selection
*/
public TreeSelection getSelection() {
return selection;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
*/
@SuppressWarnings("unused")
@Override
public void run(IAction action) {
TreePath[] paths = this.getSelection().getPaths();
IFile file = (IFile) this.getSelection().getFirstElement();
String url = HtmlUrlBuilder.getUrl(file);
IWorkbenchBrowserSupport browserSupport = PlatformUI.getWorkbench().getBrowserSupport();
try {
IWebBrowser browser = browserSupport.createBrowser(file.getFullPath().toString());
browser.openURL(new URL(url));
} catch (PartInitException | MalformedURLException e) {
e.printStackTrace();
}
}
/**
* {@inheritDoc}
*
* @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
* org.eclipse.jface.viewers.ISelection)
*/
@Override
public void selectionChanged(IAction action, ISelection selection) {
this.selection = (TreeSelection) selection;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction,
* org.eclipse.ui.IWorkbenchPart)
*/
@Override
public void setActivePart(IAction action, IWorkbenchPart part) {
// TODO Auto-generated method stub
}
}
2.6 获取浏览器支持
通过平台ui获取工作台,再获取浏览器支持,创建浏览器,打开url地址。
IWorkbenchBrowserSupport browserSupport = PlatformUI.getWorkbench().getBrowserSupport();
try {
IWebBrowser browser = browserSupport.createBrowser(file.getFullPath().toString());
browser.openURL(new URL(url));
} catch (PartInitException | MalformedURLException e) {
e.printStackTrace();
}
2.7 控制台扩展
在控制台管理添加新建立的 MessageConsole 消息控制台,使用消息流MessageConsoleStream 输出文本信息和错误堆栈信息。
public class Console {
private static MessageConsole console = findConsole();
private static MessageConsoleStream stream;
public static void println(String msg, Throwable e) {
println(msg);
try {
OutputStreamWriter writer = new OutputStreamWriter(stream);
PrintWriter s = new PrintWriter(writer);
e.printStackTrace(s);
writer.flush();// 刷才会输出
} catch (IOException e1) {
e1.printStackTrace();
}
}
public static void println(String msg) {
if (stream == null) {
stream = console.newMessageStream();
stream.setEncoding("utf-8");
}
stream.println(msg);
}
/**
*
* @return
*/
public static MessageConsole findConsole() {
String name = "xxx";
IConsoleManager consoleManager = ConsolePlugin.getDefault().getConsoleManager();
IConsole[] consoles = consoleManager.getConsoles();
for (IConsole console : consoles) {
if (name.equals(console.getName())) {
return (MessageConsole) console;
}
}
MessageConsole console = new MessageConsole(name, null);
consoleManager.addConsoles(new IConsole[] { console });
return console;
}
public static void close() {
if (stream != null) {
IOUtils.closeQuietly(stream);
}
stream = null;
}
}