- 浏览: 146838 次
- 性别:
- 来自: 南阳
文章分类
最新评论
-
caoshiyu2008:
请问这个问题如何解决的?
2010年7月29号--关于一个文件读取错误的问题 -
AquariusM:
做事情 先动脑子后动手 哈哈
写在四个月的工作生活之后。。。 -
AquariusM:
因为这本书 最近情绪上非常低落没有干劲还好会去参加海涛的婚礼 ...
《遇见未知的自己》----关于我 2011年4月24日 -
AquariusM:
连接池技术我也不是太熟悉只是在项目中用到了 来优化项目连接速度 ...
2010年8月25号---数据库连接池之---bonecp简单连接池的创建和使用 -
haiyangyiba:
朋友,最后一句
connectionPool.shutdown ...
2010年8月25号---数据库连接池之---bonecp简单连接池的创建和使用
链接地址:http://space.itpub.net/13081368/viewspace-374853
实现项目特性插件
本节将从一个具体的实例出发,在Eclipse 项目中添加用户自己的项目特性,扩展Eclipse的选项,让用户的插件具有一个产品的雏形。
项目扩展点
用户已经了解了如何在Eclipse中添加视图、编辑器、透视图菜单和工具栏按钮。本节将要介绍如何加入自己的项目相关特性,其中包括向导、项目特性、构建器和属性页。项目特性扩展点如图1所示。
图1 项目特性扩展点
项目特性扩展点及实现类
“nature”为用户添加项目的特有特性,Eclipse中一个项目可以同时具有多个nature特性。例如用户要在Java 项目的基础上扩展自己的项目,加入了自己项目的特有特性。这样JDT就能认识用户新建的项目,用户也可以判断此Java项目是否是自己的扩展。一般来说,用户期望用到JDT的强大功能,就要使自己的项目从Java项目扩展过来。
在插件中添加nature扩展点,步骤如下。
1. 在插件清单文件的Extensions页中添加“org.eclipse.core.resources.natures”扩展点,设置ID属性为“helloworldnature”。
2. 在“org.eclipse.core.resources.natures”节点下添加runtime子节点。
3. 在runtime节点下添加run节点,设置实现类class为“com.free.project. HelloWorldNature”。
扩展点在plugin.xml文件中的描述如下。
<extension
id="helloworldnature"
point="org.eclipse.core.resources.natures">
<runtime>
<run class="com.free.project.HelloWorldNature"/>
</runtime>
</extension>
nature扩展点的实现类要实现“IProjectNature”接口,并要实现“IProjectNature”的如下几个方法。
setProject(IProject project):在nature类中保存当前项目。
getProject():从nature中得到当前项目。
configure():当nature被添加到项目中时,通过configure方法配置当前项目。
deconfigure():当nature从项目删除时,通过deconfigure方法删除相应配置。
nature对应的实现类为“HelloWorldNature”,在此实现类中主要功能是通过configure方法配置当前项目的构建器,代码如例程1所示。
例程1 HelloWorldNature.java
public class HelloWorldNature implements IProjectNature { private IProject _project; //配置Nature public void configure() throws CoreException { System.out.println("configure"); IProjectDescription projectDesc = _project.getDescription(); ICommand[] buildSpec = projectDesc.getBuildSpec(); boolean hasBuilder = false; //遍历项目的构建器 for (int i = 0; i < buildSpec.length; ++i) { if (buildSpec[i] .getBuilderName() .equals("com.free.proj.helloproject.helloworldbuilder")) { hasBuilder = true; System.out.println("true"); break; } } if (hasBuilder == false) { System.out.println("false"); ICommand newCommand = projectDesc.newCommand(); newCommand.setBuilderName("com.free.proj.helloproject.helloworldbuilder"); ICommand[] buildSpecs = new ICommand[buildSpec.length + 1]; System.arraycopy(buildSpec, 0, buildSpecs, 1, buildSpec.length); buildSpecs[0] = newCommand; projectDesc.setBuildSpec(buildSpecs); _project.setDescription(projectDesc, null); } } public void deconfigure() throws CoreException { } //获得Nature所关联的项目 public IProject getProject() { System.out.println("getProject"); return _project; } //设置Nature所关联的项目 public void setProject(IProject project) { System.out.println("setProject"); _project = project; } }
提示:此外构建器的ID号为“com.free.proj.helloproject.helloworldbuilder”,ID号为插件ID号加构建器ID号,在Eclipse中和产品及项目相关的ID都采用这种方式。
构建器扩展点及实现类
Builder为项目的构建器,通过构建器能实现项目的增量构建和完全构建。在插件中添加Builder扩展点,步骤如下。
1. 在插件清单文件的Extensions页中添加“org.eclipse.core.resources.builders”扩展点,设置ID属性为“helloworldbuilder”,name属性为“hello world, bulder”。
2. 在“org.eclipse.core.resources.builders”节点下添加builder子节点。
3. 在builder节点下添加run节点,设置实现类class为“com.free.project. HelloWorldBuilder”。
扩展点在plugin.xml文件中的描述如下。
<extension
id="helloworldbuilder" name="hello world, bulder"
point="org.eclipse.core.resources.builders">
<builder>
<run class="com.free.project.HelloWorldBuilder"/>
</builder>
</extension>
builder 扩展点的实现类继承于“IncrementalProjectBuilder”类,并实现了两个资源监听器。当项目中资源发生变化的时候调用构建,本例中 只打印出相应的数据,并没有实现构建的动作,当用户需要构建时可以替换相应代码,例如编译文件等。代码如例程2所示。
例程2 HelloWorldBuilder.java
public class HelloWorldBuilder extends IncrementalProjectBuilder { //实现资源监听器 private class HelloWorldVisitor implements IResourceVisitor { public boolean visit(IResource resource) throws CoreException { System.out.println("**** HelloWorldVisitor.visit() ****"); switch (resource.getType()) { case IResource.PROJECT: System.out.println("Project added: " + resource.getName()); break; case IResource.FOLDER: System.out.println("Folder added: " + resource.getName()); break; case IResource.FILE: System.out.println("File added: " + resource.getName()); break; } return true; } } //实现资源监听器 private class HelloWorldDeltaVisitor implements IResourceDeltaVisitor { public boolean visit(IResourceDelta delta) throws CoreException { System.out.println("**** HelloWorldDeltaVisitor.visit() ****"); String type = null; switch (delta.getResource().getType()) { case IResource.ROOT: type = "ROOT"; break; case IResource.PROJECT: type = "Project"; break; case IResource.FOLDER: type = "Folder"; break; case IResource.FILE: type = "File"; break; } switch (delta.getKind()) { case IResourceDelta.ADDED: System.out.println(type + " added: "+ delta.getResource().getName()); break; case IResourceDelta.CHANGED: System.out.println(type + " changed: " + delta.getResource().getName()); break; case IResourceDelta.REMOVED: System.out.println(type + " removed: " + delta.getResource().getName()); break; } return true; } } public HelloWorldBuilder() { System.out.println("HelloWorldBuilder.constructor()"); } //开始构建 protected IProject[] build(int kind, Map args, IProgressMonitor monitor) throws CoreException { System.out.println("HelloWorldBuilder.build()"); //当构建类型不同时,添加不同的资源监听器 if (kind == IncrementalProjectBuilder.FULL_BUILD) { System.out.println("FULL_BUILD"); getProject().accept(new HelloWorldVisitor()); } else { IResourceDelta delta = getDelta(getProject()); if (delta == null) { System.out.println("AUTO_BUILD"); getProject().accept(new HelloWorldVisitor()); } else { System.out.println("INCREMENTAL_BUILD"); delta.accept(new HelloWorldDeltaVisitor()); } } return null; } }
在
用户建立的项目中,如果资源发生改变,builder会调用“HelloWorldDeltaVisitor”类进行增量构建处理,当清除项目时会调用
“HelloWorldVisitor”类进行完全构建处理。插件运行后,当用户选择自定义项目时,用户可以打开项目属性窗口看到“hello
world, builder”构建器,如图2所示。
图2 项目属性窗口
工程向导扩展点及实现类
用户如果要在项目中添加自定义的资源,采用Eclipse中的向导是最好的方式。项目也是资源的一种,一般来说如果对新建的资源有输入条件的要求,都采用向导的方式。例如新建Java项目,要输入项目名称和构建路径等。在插件中添加newWizard扩展点,步骤如下。
1. 在插件清单文件的Extensions页中添加“org.eclipse.ui.newWizards”扩展点。
2. 在“org.eclipse.ui.newWizards”节点下添加category子节点,设置ID属性为“com.free.project.wizard.category”,name属性为“HelloWorld Project Category”。
3. 在“org.eclipse.ui.newWizards”节点下添加wizard节点,设置实现类class为“com.free.project.HelloWorldWizard”,ID属性为“com.free.project.wizard”。
扩展点在plugin.xml文件中的描述如下:
<extension
point="org.eclipse.ui.newWizards">
<category
name="HelloWorld Project Category"
id="com.free.project.wizard.category"/>
<wizard
class="com.free.project.HelloWorldWizard"
category="com.free.project.wizard.category"
name="HelloWorld Project Wizard"
id="com.free.project.wizard"/>
</extension>
newWizards 扩展点的实现类继承于“org.eclipse.jface.wizard.Wizard”类,并实现了 “org.eclipse.ui.INewWizard”接口。在实现类中,通过addPages方法添加向导页到当前向导,通过 performFinish方法完成向导的结束。实现类“HelloWorldWizard”的代码如例程3所示。
例程3 HelloWorldWizard.java
public class HelloWorldWizard extends Wizard implements INewWizard { private WizardNewProjectCreationPage _page; public HelloWorldWizard() { super(); } //添加向导页 public void addPages() { _page = new WizardNewProjectCreationPage("page1"); _page.setDescription("Page 1 of Helloworld New Wizard"); _page.setTitle("HelloWorld Wizard"); addPage(_page); } //完成向导 public boolean performFinish() { boolean result = false; System.out.println("project page.name = " + _page.getProjectName()); System.out.println("project page.path = " + _page.getLocationPath()); IProject project = _page.getProjectHandle(); try { project.create(null); result = true; } catch (CoreException e) { e.printStackTrace(); } IProjectDescription projectDesc = null; try { project.open(null); projectDesc = project.getDescription(); } catch (CoreException e1) { e1.printStackTrace(); } String[] natureIds = projectDesc.getNatureIds(); String[] newNatureIds = new String[natureIds.length + 1]; System.arraycopy(natureIds, 0, newNatureIds, 0, natureIds.length); newNatureIds[natureIds.length] = "com.free.proj.helloproject.helloworldnature"; projectDesc.setNatureIds(newNatureIds); try { project.setDescription(projectDesc, null); } catch (CoreException e2) { e2.printStackTrace(); } return result; } public void init(IWorkbench workbench, IStructuredSelection selection) { } }
本
例程中没有实现用户定义的向导页,而是用Eclipse下的“WizardNewProjectCreationPage”页来作为向导页。用户也可以定
义向导页,如果有兴趣可以参考多页签编辑器中的例子源代码,多页签编辑器插件已经实现了向导。本例中可以通过新建菜单新建用户定义的项目,向导对话框如图
3所示。
图3 向导对话框
首选项页扩展点及实现类
在用户定义的项目中,一般都会有相应的参数配制。例如说Tomcat要配置相应的Web服务器,JDT可以配置代码的风格、JDK和JRE等。在插件中可以添加preferencePages扩展点,实现项目参数的配置,步骤如下。
1. 在插件清单文件的Extensions页中添加“org.eclipse.ui.preferencePages”扩展点。
2.
在“org.eclipse.ui.preferencePages”节点下添加page子节点,设置节点的ID属性为
“com.free.project.page”,name属性为“HelloWorld”,class属性为
“com.free.project.Workbench- PreferencePage”。
扩展点在plugin.xml文件中的描述如下。
<extension
point="org.eclipse.ui.preferencePages">
<page
class="com.free.project.WorkbenchPreferencePage"
name="HelloWorld"
id="com.free.project.page"/>
</extension>
preferencePages 扩展点的实现类继承于“org.eclipse.jface.preference.PreferencePage”类,并实现了 “org.eclipse.ui.IWorkbenchPreferencePage”接口。在实现类中,通过createContents方法构建自己 的属性页,通过performOk方法完成向导的结束。实现类“WorkbenchPreferencePage”的代码如例程4所示。
例程4 WorkbenchPreferencePage.java
public class WorkbenchPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { private Text _greeting; public WorkbenchPreferencePage() { super(); } public WorkbenchPreferencePage(String title) { super(title); } public WorkbenchPreferencePage(String title, ImageDescriptor image) { super(title, image); } protected Control createContents(Composite parent) { Label label = new Label(parent, SWT.CENTER); label.setText("Greeting"); _greeting = new Text(parent, SWT.SINGLE | SWT.BORDER); return parent; } protected IPreferenceStore doGetPreferenceStore() { System.out.println("WorkbenchPreferencePage.doGetPreferenceStore()"); return HelloWorldPlugin.getDefault().getPreferenceStore(); } public void init(IWorkbench workbench) { } protected void performDefaults() { System.out.println("WorkbenchPreferencePage.performDefaults()"); IPreferenceStore prefStore = getPreferenceStore(); prefStore.setValue(HelloWorldPlugin.GREETING, "world"); HelloWorldPlugin.getDefault().savePluginPreferences(); _greeting.setText(prefStore.getString(HelloWorldPlugin.GREETING)); } public boolean performOk() { boolean result = false; System.out.println("WorkbenchPreferencePage.performOk()"); IPreferenceStore prefStore = getPreferenceStore(); prefStore.setValue(HelloWorldPlugin.GREETING, _greeting.getText()); HelloWorldPlugin.getDefault().savePluginPreferences(); result = true; return result; } }
本例程只添加了一个Label控件和一个Text控件。若用户有兴趣可以添加自己完成的属性页,选择“window”→“preferences”菜单,打开首选项对话框,程序运行效果如图4所示。
图4 首选项窗口
提示:在Eclipse中,首选项页中定义的信息是一个全局的信息,这些信息为Workspace中所有的工程所共享,而属性页(property page)中的信息为某一个资源所独有,例如工程的属性。
发表评论
-
rcp新建工程没有图标的问题解决方案
2011-12-21 00:52 3824这几天因为北京的项目开展,平台加入了java开发模式,因此工具 ... -
了解 Eclipse 插件如何使用 OSGi
2011-12-14 10:47 1551转载自IBM官方文档:http://www.ibm.com/d ... -
Doclet 概述(转载)
2011-12-13 13:38 4140转载自:http://hi.baidu.c ... -
eclipse插件开发之控制台输出乱码问题
2011-12-02 11:56 3068首先建立自己的console控制台网上有很多这种例子,java ... -
关于编辑器Dirty的处理
2011-10-26 00:11 2377今天开始做些小的总结,因为Eclipse插件方面做了不少东西了 ... -
Swt/Jface treeViewer的使用 (转载)
2011-10-23 23:51 2190转载自:http://www.cnblogs.com/huqi ... -
Swt/Jface treeViewer的使用 (转载)
2011-10-23 23:50 1066<!-- [if gte mso 9]><x ... -
GEF -- 学习一下调色板,我们不知道的东西(三)影子武士Tracker
2011-09-23 10:54 926http://www.cnblogs.com/wayne_wa ... -
(转载)Eclipse GEF 开发之:当图形editor被更改时Enable "Save" action
2011-07-08 17:46 1975原文链接:http://blog.csdn.net/zhmz1 ...
相关推荐
6 编辑器 ................................................................................................................................................ 58 6.1 概述 .....................................
近一段时间在学习Web Service,呼必斯哈拉图--写的"Apache AXIS 开发 Web Services Step By Step"非常的详细,网上也存在很多不通的转载版本,很多人都说不行。我经过多次试验,总结出错误的原因有以下几个: ...
教程基于开源和分享的精神,鼓励开发者转载时注明原作者,同时更新教程以适应最新版本的Eclipse(在这个例子中是3.6版本),确保内容的时效性和相关性。 以上内容涵盖了Eclipse RCP开发的基础知识,包括RCP的架构、...
OSGi,全称为Open Service Gateway Initiative,是一种开放的服务规范,起初...总的来说,OSGi不仅是一个框架,更是一种新的思维方式,它推动了软件设计的模块化和动态化,为现代复杂软件系统的构建提供了强大的工具。
这篇学习笔记主要涵盖了如何在Eclipse环境下创建一个基本的Android项目以及对Android程序框架的基本理解。以下是对这些内容的详细阐述: 首先,Android程序框架的核心组件是Activity,它是应用程序与用户交互的窗口...
类似Eclipse ADT, Android Studio 提供了集成的Android开发工具用于开发和调试,在IDEA的基础上,Android Studio提供基于Gradle的构建支持、Android 专属的重构和快速修复、功能强大的布局编辑器和效果预览等功能。...
`.classpath`和`.project`是Eclipse项目配置文件,它们定义了项目的依赖项和构建路径,对于使用Eclipse IDE的开发者来说至关重要。 6. **编译与部署**: `bin`目录通常包含编译后的Java类文件,这些文件在jBPM引擎...
`.classpath`和`.project`文件是Eclipse项目配置文件,它们包含了项目依赖和构建路径信息。使用Eclipse这样的IDE,开发者可以更好地管理和调试使用Castor的项目。 6. 库依赖 `lib`目录下的文件通常是项目的依赖库...
2. "Eclipse的常用简单使用方法wdr.doc" - 这是一个关于Eclipse IDE的使用教程,帮助学习者掌握Eclipse的基本操作和调试技巧。 3. "MyEclipse 7.0快捷键大全[转载].txt" - 提供MyEclipse 7.0的快捷键列表,有助于...
GWT-EXT则是基于GWT之上的一套高级用户界面库,它借鉴了ExtJS的设计理念,提供了更为丰富和强大的UI组件集合,使得开发者能够更加轻松地构建复杂的Web应用程序。 #### 二、CypalStudio工具的安装与配置 **步骤一:...
在这里,我们主要利用它来构建PDF文档结构。 在Eclipse开发环境下,你需要将这两个库添加到项目的类路径中。你可以通过以下步骤完成: 1. 右键点击项目 -> Build Path -> Configure Build Path -> Libraries -> ...
MyEclipse是基于Eclipse的Java EE集成开发环境,它提供了丰富的功能,如代码编辑、调试、构建、部署等,对于Java Web应用的开发非常方便。在Red5项目中,MyEclipse可以用于创建、管理和部署Red5应用。 四、集成步骤...
8. **Build-Number** 和 **Built-By**: 通常用于版本控制和构建过程,提供构建的唯一标识和构建者的身份。 9. **Created-By**: 描述了创建JAR文件的Java版本或者工具。 博客链接指向的iteye网站是一个知名的IT技术...
- **Ofbiz开发工具**:包括Ant构建工具、Eclipse IDE插件、Ofbiz控制台等,这些工具能简化开发过程,提高效率。 - **Ofbiz配置与部署**:理解如何配置Ofbiz的运行环境,如设置数据库连接、配置服务器等,以及如何...
【描述】"j2me开发 转载自电驴"表明这是一个关于J2ME开发的资源,可能是一个电子书或教程,来源于网络共享平台“电驴”。J2ME开发者通常会寻找这些资源来学习移动应用程序的开发,包括基本概念、API使用、用户界面...