- 浏览: 987602 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
运乃强谦:
老哥,你确定这个wsdl 地址 可以访问?
[CXF] Server与Client实现方式五:HTTPS -
wangyudong:
由CXF实现的微服务需要有比较好的工具去测试RESTful A ...
[CXF] Server与Client实现方式四:JMS -
dengmiao:
JAXB学习三 (验证) -
panamera:
你好。可以提供maven pom配置是怎么配置的?不知道你使用 ...
[CXF] Server与Client实现方式四:JMS -
u010221220:
请问楼主一二三部分的代码都应该放在哪个函数体中。
使用JDI监听Java程序运行
builder和nature是Eclipse中提供的两个扩展点。一般来说我们都是先有自己特定的project类型,然后在这类project上加上自定义的builder和nature。
其实所谓的特定的project通常都是由特有的nature来标识的;而又一般builder是建立在某类特定的project上,所以我们可以得出:Nature决定了project和builder。
下面简单介绍一下它们的使用。
一、扩展Nature
首先定义nature的扩展,如下:
<extension id="nature" point="org.eclipse.core.resources.natures"> <runtime> <run class="com.tibco.cdc.liugang.npb.LiugangProjectNature"> </run> </runtime> </extension>
除此之处,nature还有一些其他的约束属性,具体的可以参见帮助。
LiugangProjectNature的实现如下:
public class LiugangProjectNature implements IProjectNature { private IProject project; public static final String ID = "com.tibco.cdc.liugang.npb.nature"; public void configure() throws CoreException { } public void deconfigure() throws CoreException { } public IProject getProject() { return project; } public void setProject(IProject project) { this.project = project; } }
注意:nature的ID为plugin的ID加上nature扩展的ID.
方法说明:
- setProject()会在project.setDescription()的时候调用,如果那个project的description安了这个nature
- configure()和deconfigure()方法会在nature安上和卸掉的时候调用,一会我们可以看到builder在其中是怎么用的。
- setProject()和configure()的调用顺序是先调setProject()后调configure().
二、生成Project
有了nature,下面就可以创建一个project,并把这个nature加到这个project上,如下 :
IWorkspace workspace = ResourcesPlugin.getWorkspace(); IWorkspaceRoot root = workspace.getRoot(); String projectName = "TestNPB"; IProject project = root.getProject(projectName); if (!project.exists()) { project.create(null); project.open(null); } IProjectDescription description = project.getDescription(); ProjectUtil.addNature2Project(description, new String[]{LiugangProjectNature.ID}, null); project.setDescription(description, null);
这里,我写了一个通用类来处理nature,builder的增加和删除,我们先看这个addNature2Project()方法:
public static void addNature2Project(IProjectDescription description, String[] natureIds, IProgressMonitor monitor) throws CoreException { String[] prevNatures = description.getNatureIds(); String[] newNatures = new String[prevNatures.length + natureIds.length]; System.arraycopy(prevNatures, 0, newNatures, 0, prevNatures.length); for(int i = prevNatures.length;i<newNatures.length;i++){ newNatures[i] = natureIds[i-prevNatures.length]; } description.setNatureIds(newNatures); }
三、定义Builder
按最初我们说的,builder一般安装在具有某种特定nature的project上。这里我们定义一个builder的扩展,然后再修改一下nature的扩展。分别如下:
Nature:
<extension id="nature" point="org.eclipse.core.resources.natures"> <runtime> <run class="com.tibco.cdc.liugang.npb.LiugangProjectNature"> </run> </runtime> <builder id="com.tibco.cdc.liugang.npb.builder"> </builder> </extension>
Builder:
<extension id="builder" point="org.eclipse.core.resources.builders"> <builder callOnEmptyDelta="true" hasNature="true" isConfigurable="false"> <run class="com.tibco.cdc.liugang.npb.LiugangIncrementalProjectBuilder"> </run> </builder> </extension>
回到代码,这里假设builder由nature控制。所以builder的安装与卸载分别在nature的configure()方法和deconfigure()方法中实现,如下:
public void configure() throws CoreException { IProjectDescription description = project.getDescription(); ProjectUtil.addBuilderToProject(description, new String[] { LiugangIncrementalProjectBuilder.ID }, null); project.setDescription(description, null); } public void deconfigure() throws CoreException { IProjectDescription description = project.getDescription(); ProjectUtil.removeBuilderFromProject(description, new String[] { LiugangIncrementalProjectBuilder.ID }, null); project.setDescription(description, null); }
其中ProjectUtil中的实现如下:
public static void addBuilderToProject(IProjectDescription description, String[] builderIds, IProgressMonitor monitor) throws CoreException { ICommand[] buildSpec = description.getBuildSpec(); ICommand[] newBuilders = new ICommand[buildSpec.length + builderIds.length]; System.arraycopy(buildSpec, 0, newBuilders, 0, buildSpec.length); for (int i = buildSpec.length; i < newBuilders.length; i++) { ICommand command = description.newCommand(); command.setBuilderName(builderIds[i - buildSpec.length]); newBuilders[i] = command; } description.setBuildSpec(newBuilders); } public static void removeBuilderFromProject( IProjectDescription description, String[] builderIds, IProgressMonitor monitor) { ICommand[] buildSpec = description.getBuildSpec(); List<ICommand> newBuilders = new ArrayList<ICommand>(); for (ICommand command : buildSpec) { boolean find = false; for (String id : builderIds) { if (command.getBuilderName().equals(id)) { find = true; break; } } if (!find) { newBuilders.add(command); } } description.setBuildSpec(newBuilders.toArray(new ICommand[0])); }
这样完成了nature和builder的增加。最后,我们稍稍看一下builder的实现。
四、builder的实现
对于builder的实现来说,我们通常关心以下几个方法:
public class LiugangIncrementalProjectBuilder extends IncrementalProjectBuilder { public static final String ID = "com.tibco.cdc.liugang.npb.builder"; public LiugangIncrementalProjectBuilder() { } @Override protected IProject[] build(int kind, Map args, IProgressMonitor monitor) throws CoreException { return null; } @Override protected void clean(IProgressMonitor monitor) throws CoreException { super.clean(monitor); } @Override protected void startupOnInitialize() { super.startupOnInitialize(); } }
build()方法中,一般会根据不同的build类型,来实现不同的build策略,例如:
@Override protected IProject[] build(int kind, Map args, IProgressMonitor monitor) throws CoreException { switch (kind) { case FULL_BUILD: processFullBuild(monitor); break; default: IResourceDelta delta = getDelta(project); if (delta == null) { processFullBuild(monitor); } else { processIncrementalBuild(delta, monitor); } break; } return null; }
clean()方法,在clean动作执行时被调用,通常用于清理之前build的信息,然后build()方法会被调用。clean()方法通常可以如下实现:
@Override protected void clean(IProgressMonitor monitor) throws CoreException { super.clean(monitor); /* * remove all build files */ IFolder outputFiles = project.getFolder(FILES_OUTPUT_PATH); outputFiles .refreshLocal(IResource.DEPTH_INFINITE, monitor); if (outputFiles .exists()) { outputFiles .delete(true, monitor); } }
startupOnInitialize()可以调用一些初始信息,或者初始变量,例如上面用到的project变量就可以如下:
@Override protected void startupOnInitialize() { super.startupOnInitialize(); this.project = getProject(); }
这样,一个完整的nature,builder的添加处理过程就实现了。
发表评论
-
在OSGI容器Equinox中嵌入HttpServer
2011-12-27 18:01 10747简单介绍一下如何在一个osgi的bundle中内嵌使用http ... -
GEF中用鼠标移动画布
2011-12-27 13:37 1357第一步 增加Palette项: moveTool = n ... -
在Eclipse中使用Maven
2011-09-29 13:41 1267上一篇讲了Maven的基础知识,这一篇讲怎么在Eclipse里 ... -
增加Table的Column右键菜单
2011-03-15 15:55 1472table.addListener(SWT.MenuDete ... -
RGB与HSB之间的相互转换
2010-10-29 15:14 12347[引用:] [ http://www.missyuan.com ... -
给Table和Tree的Header加右键菜单
2010-10-29 11:26 2517通常,如果不做特殊处理的话,在表头(树头,以下统称表头)的上点 ... -
给Editor加上Annotation
2010-10-27 17:27 2759要自定义Annotation,需要实现以下扩展点: “ ... -
org.eclipse.ui.navigator.linkHelper的使用
2010-08-06 15:43 2409org.eclipse.ui.navigator.linkHe ... -
让表项支持鼠标拖动移位,并自动滚动滚动条
2010-04-07 11:43 2678设想我们有一个表,表中有很多数据(多到竖起滚动条至少要出现)。 ... -
Eclipse截屏插件
2010-01-19 15:59 2729闲来无事,就写了一个截屏插件,见附件,直接放在eclipse的 ... -
Eclipse取得路径的方法
2009-11-27 10:30 1904从插件中获得绝对路径: TestPlug ... -
实现自己的团队协作客户端一
2009-11-12 15:04 1420在Eclipse里自带了团队协 ... -
扩展Eclipse Java编辑器的链接功能
2009-09-09 09:35 3611在JDT中,可以在一个类,或者是方法,或者是变量上进行跳转。这 ... -
添加监听到EMF对象、加密保存
2009-08-14 10:10 984一、可以注册监听来获取EMF模型改变事件,例如: pu ... -
使用Tab键实现表格的跳转
2009-08-12 21:29 2988在Excel中,如果按Tab键,则焦点会在相邻的方格中不断的跳 ... -
StyledCellLabelProvider的应用
2009-08-11 16:47 2272昨天写了EditingSupport的应用,可以方便的编辑Ta ... -
EditingSupport的应用
2009-08-10 15:20 2965Eclipse3.3中提供了一个EditingSupport类 ... -
合理的自定义扩展点
2009-06-26 01:43 1799Eclipse中提供了各种各样的用于扩展Eclipse功能的 ... -
关键字高亮插件
2009-06-26 00:59 1925在eclipse中,如果用Ctrl+F来进行查找,它只会一个一 ... -
置窗口于显示器中央
2009-05-06 09:46 922要把窗口置于显示器的中央,也是很容易的。如下: ...
相关推荐
(2)然后修改 Eclipse 工程下的 .project 文件:在 <natures> </natures> 中加入 <nature>org.eclipse.wst.common.project.facet.core.nature</nature>、<nature>org.eclipse.wst.common.modulecore....
<name>org.eclipse.wst.common.project.facet.core.builder <name>org.eclipse.wst.validation.validationbuilder ... ``` 然后,刷新项目,选择 Java 1.6 和 Dynamic Web Module 2.5,点击 OK。 ...
综上所述,Eclipse的资源管理是构建插件和应用程序的基础,它提供了丰富的API,使开发者能够高效地处理项目中的文件和目录,跟踪变化,管理状态,并与其他Eclipse功能如Builder、Nature和Marker紧密集成。...
<name>org.eclipse.wst.common.project.facet.core.builder <name>org.eclipse.wst.validation.validationbuilder ``` 3. **重新打开项目**:通过File -> Import -> General -> Existing Projects...
MyEclipse与Eclipse都是广泛使用的Java开发工具,尽管它们都基于Eclipse平台构建,但在项目结构和配置上存在一定的差异。MyEclipse项目中的Web工程通常使用`WebRoot`作为其根目录,而Eclipse则默认使用`WebContent`...
开发Eclipse插件时,理解并熟练使用这些扩展点是至关重要的,因为它们决定了插件的功能范围和与Eclipse核心的集成程度。通过深入学习和实践,开发者可以构建出满足特定需求的定制化开发环境,提升工作效率。
<nature>org.eclipse.jdt.core.javanature</nature> ``` 3. **修改Eclipse配置**: - **调整Eclipse内存设置**:为了处理大型的源码项目,需要增大Eclipse的内存分配。在eclipse.ini文件中,修改`-Xms`, `-...
`<name>org.eclipse.wst.common.project.facet.core.builder</name>` `<arguments>` `</arguments>` - `<buildCommand>` `<name>org.eclipse.wst.validation.validationbuilder</name>` `<arguments>` `...
本文将详细介绍 Eclipse 平台中的多个关键扩展点及其作用,帮助开发者更好地理解和利用 Eclipse 的扩展能力。 #### 二、核心扩展点 **1. org.eclipse.core.contenttype.contentTypes** 此扩展点用于定义新的内容...
5. **安装Flex Builder 3插件**:在Eclipse中,通过`Help` -> `Software Updates` -> `Find and Install` -> `Search for new features to install`,然后输入FDT的更新地址`http://fdt.powerflasher.com/update`,...
Java开发入行真功夫 光盘 源代码 , <name>ch14 <comment></comment> <name>org.eclipse.jdt.core.javabuilder ... <nature>org.eclipse.jdt.core.javanature</nature> </projectDescription>
<name>org.eclipse.jdt.core.javabuilder <arguments></arguments> <name>com.android.ide.eclipse.adt.ApkBuilder</name> <arguments></arguments> <nature>...
<name>plane <comment></comment> <name>org.eclipse.jdt.core.javabuilder <nature>org.eclipse.jdt.core.javanature</nature> </projectDescription>
2. `.project`:这是Eclipse项目的配置文件,包含了项目的属性,如构建路径、Nature(项目特性)和Builder(构建器)。在Struts2项目中,它可能会包含Struts2插件的Nature,确保IDE能够理解和处理Struts2特定的配置...
7. **Flex Builder 3 Eclipse Plugin**:这是一个Eclipse插件,用于在Eclipse环境中集成Flex开发功能,提供代码编辑、调试和构建工具,便于与Java后端整合。 8. **Dynamic Web Project**:在Eclipse中创建的动态Web...
<?xml version="1.0" encoding="UTF-8"?> 信管1班班级管理系统(单机版) <comment> ... <name>org.eclipse.jdt.core.java... <nature>org.eclipse.jdt.core.javanature</nature> </projectDescription>
【.project】文件是Eclipse或Flash Builder项目的元数据文件,定义了项目的结构、构建路径、nature(项目类型)等信息,使得IDE可以识别和管理项目。 【.flexLibProperties】文件是Flex项目的特定属性文件,它记录...
3. `.project` 文件是Eclipse项目的元数据,包含了项目的构建信息、Natures(比如Android Nature)和Builders(比如ADT Builder)等设置。 4. `project.properties` 文件记录了项目的属性,如目标Android版本和其他...