......Eclipse平台提供的扩展点有增加菜单项增加视图增加编辑器工作台和资源访问的API是Eclipse提供的API中最基本的,在插件开发时使用频率较高的API。在这里不做详细的说明,在以后得例子中会出现一些这样的AP_eclipse插件开发">
赞
踩
1.Eclipse的架构
architecture=架构
platform=平台
2.扩展点
代码1-1 plugin.xml中声明扩展
<extension point="被使用扩展点的ID">
......
</extension>
Eclipse平台提供的扩展点有
增加菜单项
增加视图
增加编辑器
工作台和资源访问的API是Eclipse提供的API中最基本的,在插件开发时使用频率较高的API。在这里不做详细的说明,在以后得例子中会出现一些这样的API。
使用PlatformUI作为工作台访问的入口点和使用ResourcesPlugin作为工作区访问的入口点,是无论如何也要记住的。
3.工作台(Workbench)
从插件的代码中访问工作台使用org.eclipse.ui.PlatformUI类。代码1-2说明了从PlatformUI中取得工作台和工作台窗口的代码示例。
代码1-2 使用PlatformUI访问工作台
//取得工作台
IWorkbench workbench = PlatformUI.getWorkbench();
//取得工作台窗口
IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
//取得工作台页面
IWorkbenchPage page = window.getActivePage();
//取得当前处于活动状态的编辑器窗口
IEditorPart part = page.getActiveEditor();
4.工作区和资源API
对工作区的访问需要使用org.eclipse.core.resources.ResourcesPlugin。代码1-3是利用IWorkspaceRoot,去的工作区内的工程的代码示例
代码1-3 使用ResourcesPlugin访问工作区
//取得工作区的root
IWorkspaceRoot wsroot = ResourcesPlugin.getWorkspace().getRoot();
//取得项目
IProject[] projects = wsroot.getProjects();
1.生成插件工程
选择新建一个插件工程,选择[插件工程(Plug-in Project)],新建一个现有的hello world模板
2.插件的动作
manifest编辑器的[概要]页面右侧[启动Eclipse应用(Luanch an Eclipse application)]。点击后,会启用一个新的Eclipse实例。
一个插件包含MANIFEST.MF和plugin.xml两个配置文件。MANIFEST.MF是OSGi的handler配置文件,记录了插件ID、名称、作者、和其他插件的依赖关系等。plugin.xml记录了插件的扩展和扩展点的定义等信息。
3.PDE(插件开发环境)的功能
- 解读示例插件的代码
为了在菜单栏增加一个项目,文件中使用了extension元素。
①的id指定了扩展点的名称org.eclipse.ui.actionSets。extension里的内容根据扩展点而不同。示例插件中包含了actionSet、menu、action等元素。
②中的class属性指定了actions.SampleAction类作为响应菜单或者工具栏按钮的action类。
①run()方法内记录了action执行时的处理。利用MessageDialog.openInformation方法打开了一个对话框。
使用JUnit对插件进行测试
调试和错误处理
ILog log = Activator.getDefault().getLog();
log.log(new Status(IStatus.OK, Activator.PLUGIN_ID,
0, "正常消息", null));
log.log(new Status(IStatus.OK, Activator.PLUGIN_ID,
0, "异常消息", new Exception("输出日志的异常")));
try{
//....
}catch(Exception e){
IStatus status = new Status(IStatus.ERROR, Activator.PLUGIN_ID,
0, e.toString(), e);
ErrorDialog.openError(window.getShell(), "错误", "插件出错了!", status);
}
OSGi(Open Service Gateway Initiative)框架是运行在JavaVM环境里的服务平台。框架提供的主要功能是对应用和组件的生命周期管理,系统可以在无需重启的情况下,远程操纵组件的安装、启动、停止。
在Eclipse快捷方式上加入-console参数,可以在Eclipse启动的同时创建一个OSGi框架控制台。
1. 生成OSGi工程
生成工程后,在Manifest编辑器中点击[启动框架(Launch the framework)]运行新生成的OSGi Bundle。执行后可能会出现大量的错误。原因是Eclipse中的OSGiBundle在OSGi框架中注册了,但是UI相关的部分没能启动。我们进入[运行设置(Run Configuration)],取消所有的Bundle绑定,只选中我们当前要测试的Bundle。
2. OSGi Service和Tracker
上一节我们制作了一个简单的在启动和停止时输出消息的Bundle。代码很简单的实现了BundleActivator接口的sart()和stop()方法,在其中利用System.out.println打出了信息。
public class Activator implements BundleActivator {
public void start(BundleContext context) throws Exception {
System.out.println("Hello World!!");
}
public void stop(BundleContext context) throws Exception {
System.out.println("Goodbye World!!");
}
}
在OSGi框架中为了生命周期管理提供了开始和停止方法,仅此而已,OSGi Bundle就可以运行起来了。OSGi框架有一种可以为多个Bundle提供作为共通(Common)使用的Service功能,称为OSGi Service。
最简单的OSGi Service
public class OSGiService {
public void doSomething(){
System.out.println("Running Common Service");
}
}
代码3 执行OSGi Service public class Activator implements BundleActivator { public void start(BundleContext context) throws Exception { System.out.println("Hello World!!"); // 注册OSGi Service context.registerService(OSGiService.class.getName(), new OSGiService(), new Properties()); } public void stop(BundleContext context) throws Exception { System.out.println("Goodbye World!!"); // 生成Service Tracker ServiceTracker tracker = new ServiceTracker(context, OSGiService.class.getName(), null); tracker.open(); // 取得Service OSGiService service = (OSGiService) tracker.getService(); // 执行Service service.doSomething(); } }
3. Bundel的安装和更新
OSGi框架在JavaVM不重启的情况下也可以安装和卸载Bundle。
将工程导出到c盘根目录下,启动OSGi控制台输入install file:\\C:\plugins\NewBundle_1.0.0.201008182238.jar。再通过ss命令确认bundle的安装。
代码6 Bundle的安装和卸载
osgi> install file:\\\C:\plugins\NewBundle_1.0.0.201008182238.jar Bundle id is 321 osgi> ss New Framework is launched. id State Bundle 321 INSTALLED NewBundle_1.0.0.201008182238 osgi> start NewBundle New bundle start!! osgi> uninstall NewBundle New bundle stop!! osgi> ss New Framework is launched. id State Bundle osgi>
swt,主要是一些界面的布局开发。可以自己定制一些简单的页面,绑定一些事件。
GEF,是开发编辑器的一种常用技术。
EMF,是开发复杂模型的框架。
GMF,是GEF与EMF的整合,但是包含的插件包很多,因此不推荐学习。如果使用的话,自己整合GEF和EMF也是可以的。红皮书里面有整合的内容。
Java Project :
导入jar包,项目 名称 右键->build path -> add library 或者 add external archives 导入jar包
Plug-in Project :
将要导入的jar包放进插件project的根目录下新建的lib文件夹中,编辑plug.xml的runtime选项卡在Classpath一栏中选择Add导入lib/xxx.jar
插件工程不能在Build path中添加jar包,即不能使用Java Project的方式,否则上面做的不起作用。
1.使用Gradle 新建idea工程
2.工程配置 build.gradle
idea,jvm,gradle版本
sourceCompatibility=1.8
intellij{
version='idea的版本号(2021.1.2)'}
updateSinceUntilBuild=false //忽略版本冲突
3.基础组件介绍
JBPopup popup = JBPopupFactory.getInstance().createMessage("Hello world");
popup.showInBestPositionFor(e.getDataContext();
对话框
弹出框
-New Swing UI设计器 - Create Dialog Class
根据 Swing UI设计器 拖拽设置IU
配置plugin.xml
4.打包发布
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。