`

Eclipse资源管理(二)

 
阅读更多

 

IProject中的Builder与Nature

1.创建一个新的工程

如下是创建一个新的工程的代码,但是此时工程就是一个文件夹,没有任何特性

 

public void createProject(String projectName) throws CoreException{
		IWorkspace workspace = ResourcesPlugin.getWorkspace();
		IWorkspaceRoot root = workspace.getRoot();
		
		IProject project = root.getProject(projectName);
		if(!project.exists()){
			project.create(null);
			project.open(null);
		}
		
		ProjectUtil.addNature2Project(project, new String[]{LengProjectNature.ID}, null);
	}
 

 

 

2.为project扩展相应的nature

nature是工程特性的一种标识,eclipse中有如此多种类的project,系统是如何识别他们的。IProject对象本身没有什么特别的标识,所以区分各种不同的project,主要是nature来进行区分。例如,如果两种不同的project对象,如果有同样的一种nature特性,如果我们只需要考虑这种nature特性的时候,这两种project其实是可以等同的。可以借鉴equals方法来进行理解。

 

 

<extension
         id="com.leng.test.project.nature.LengProjectNature"
         name="Leng Project Nature"
         point="org.eclipse.core.resources.natures">
      <runtime>
         <run
               class="com.leng.test.project.nature.LengProjectNature">
         </run>
      </runtime>
      <builder
            id="com.leng.test.project.nature.LengIncrementalProjectBuilder">
      </builder>
   </extension>
 

 

1)一个nature里面可以包含多个builder,并且用builder的id进行识别

注意:com.leng.test.project.nature.LengIncrementalProjectBuilder是builder所在的插件的id+.+builderId

 

2)实现一个IProjectNature类

 

public class LengProjectNature implements IProjectNature {
	
	private IProject project;  
	
	/**
	 * nature的ID为plugin的ID加上nature扩展的ID
	 */
	public static final String ID = "com.leng.test.project.com.leng.test.project.nature.LengProjectNature"; 
	
	@Override
	public void configure() throws CoreException {
	    ProjectUtil.addBuilderToProject(project,  
	            new String[] { LengIncrementalProjectBuilder.ID }, null);  
	}

	@Override
	public void deconfigure() throws CoreException {
	    ProjectUtil.removeBuilderFromProject(project,  
	            new String[] { LengIncrementalProjectBuilder.ID }, null);  
	}

	@Override
	public IProject getProject() {
		return project;
	}

	/**
	 * setProject()和configure()的调用顺序是先调setProject()后调configure().
	 */
	@Override
	public void setProject(IProject project) {
		this.project = project;
	}

}
 

 

3.nature的img扩展:

 

 

<extension
         point="org.eclipse.ui.ide.projectNatureImages">
      <image
            icon="com.leng.test.project.image1"
            id="com.leng.test.project.image1"
            natureId="com.leng.test.project.image1">
      </image>
   </extension>
 

 

依赖插件org.eclipse.ui.ide,此扩展点为特点的nature项目提供特点的图像标记,如java工程中的文件中“J”。

 

4.为nature扩展相应的builder

 

刚才说到nature是用来标识project的特性的,但是特性不能当饭吃。new一个工程里面那么多东西,而且算不是new,是其他改变工程里面资源的操作。如果说nature只是标识,那么builder就是实实在在的构建了。

当然,构建器本身是独立的,出来跟nature绑定使用,还可以直接添加到project中

 

<extension
         id="com.leng.test.project.nature.LengIncrementalProjectBuilder"
         point="org.eclipse.core.resources.builders">
      <builder
            callOnEmptyDelta="false"
            hasNature="true"
            isConfigurable="true">
         <run
               class="com.leng.test.project.nature.LengIncrementalProjectBuilder">
         </run>
      </builder>
   </extension>
 

 

hasNature:该构建器是否跟nature关联,默认为false,如果为true则必须nature存在才会触发构建

isConfigurable:设定构建器是否可以通过特定的构建触发器运行,如果为true,则可以通过ICommand.setBuilding

callOnEmptyDelta:当增量构建的增量为null时,如果设置此属性为true则始终构建,不会关构建内容是否为null。

 

public class LengIncrementalProjectBuilder extends IncrementalProjectBuilder {

	public static final String ID = "com.leng.test.project.nature.LengIncrementalProjectBuilder";
	
	public LengIncrementalProjectBuilder() {
	}

	@Override
	protected IProject[] build(int kind, Map args, IProgressMonitor monitor)
			throws CoreException {
		getCommand();
		getDelta(getProject());
		
		switch (kind) {  
	    case FULL_BUILD:  
//	        processFullBuild(monitor);  
	        break;  
	    case CLEAN_BUILD:
	    	break;
	    default:  
	        IResourceDelta delta = getDelta(getProject());   
	        break;  
	    }  
		return null;
	}

	
	@Override
	protected void startupOnInitialize() {
		super.startupOnInitialize();
	}

	/**
	 * 清除一些保留且无用的东西
	 */
	@Override
	protected void clean(IProgressMonitor monitor) throws CoreException {
		super.clean(monitor);
	}
}
 

 

 kind:构建类型,FULL_BUILD(全量构建),INCREMENTAL_BUILD(增量构建),

 

 AUTO_BUILD(自动构建,也是增量的),CLEAN_BUILD(在调用build方法前调用clean方法)

 

getDelta:获取指定工程里面增量改变的资源内容

 

派生资源:派生资源就是完全由build构建出来的资源,由某一种源派生出来。

 

 

5.构建器的触发

构建器的触发有两种方式:一种是自动触发,系统资源改变时,由eclipse自动增量构建。另一种是手动构建,IWorkspace和IProject里面都有构建方法,只要获取到相关对象就可以进行构建。

 

分享到:
评论

相关推荐

    OpenExplorer(eclipse资源管理器插件)

    eclipse的一个插件,可以在eclipse中快速的打开选中的某个文件在电脑中的位置,直接定位到具体的文件夹,压缩文件包含了4.4以上版本和4.4一下版本的JAR包

    基于MySQL和Eclipse的人力资源管理系统毕业设计实现

    本毕业设计主要研究人力资源管理系统的设计与实现。系统采用MySQL数据库存储人力资源数据,利用Eclipse开发平台和JSP、Servlet等技术开发。系统主要包括人员信息管理、招聘管理、离职管理、薪资管理、培训管理、绩效...

    Eclipse插件开发培训_资源管理(入门).ppt

    Eclipse插件开发培训_资源管理(入门).ppt

    人力资源管理系统

    (毕业设计项目)人力资源管理系统,包括档案录入、用户管理、薪酬管理、培训管理、招聘管理等模块。代码、数据库表代码齐全,导入进去修改下连接的数据库即可使正常用

    基于JavaWeb的企业人力资源管理系统【项目源码+数据库脚本】(毕设)

    本项目是一套基于JavaWeb的企业人力资源管理系统,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本、软件工具、项目说明等,该项目可以直接作为毕设使用。 ...

    Eclipse 浏览目录插件

    Eclipse 4 插件,用于在资源管理器中打开活动窗口文档所在的文件夹,或打开命令行。安装:直接放置于 Eclipse 的 dropins 目录下,重启后工具栏及左键菜单均有Smart Explore条目。

    eclipse jetty插件安装(离线版)

    使用方法:解压缩,直接复制到eclipse安装目录的dropins文件夹下面,重启就可以了。 初次使用时在一个web项目上右键run as——run configuration

    jetty 9.2.24

    jetty服务器,9.2版本适合java7+开发环境。 Jetty是一个纯粹的基于Java的网页服务器和Java Servlet容器。 尽管网页服务器通常用来为人们呈现文档,但是... Jetty作为Eclipse基金会的一部分,是一个自由和开源项目。

    Eclipse插件开发培训_资源管理(进阶).ppt

    Eclipse插件开发培训_资源管理(进阶).ppt

    韩顺平 学生管理系统 Eclipse+sqlServel源码

    只有模式二(模式一学习意义不大,就没弄)。是Eclipse项目源码和sqlServer项目源码。并附有图文教程,对新手学习有帮助。 另外,我原先上传的资源本来说不要分数的,结果不小心设置了是1分,然后怎么也改不了,也...

    Java学生信息管理系统(eclipse+MySQL)

    本资源为Java学生信息管理系统,实现功能如下: 1、系统的登录和注册 2、系统分为管理员,学生,教师三个身份,管理员和教师有权对学生信息进行增删改查操作,学生只能进行查询操作 3、学生成绩信息的增删改查操作 ...

    网络,服务,eclipse

    NULL 博文链接:https://jarip.iteye.com/blog/1841219

    图书馆管理系统Eclipse-专业指导文档类资源

    很好的Eclipse做的图书管理系统噢~ 很好的Eclipse做的图书管理系统噢~ 很好的Eclipse做的图书管理系统噢~ 很好的Eclipse做的图书管理系统噢~

    基于Eclipse+Java+Swing+Mysql图书信息管理系统

    系统介绍 该系统实现了查看图书列表、新增图书信息、删除图书...运行环境:eclipse、idea、jdk1.8 详见:https://blog.csdn.net/qq_33037637/article/details/125583597 系统经多次测试,运行无误,请大家放心下载。

    基于SSM的人力资源管理系统【项目源码+数据库脚本】(毕设)

    本项目是一套基于SSM的人力资源管理系统,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本、软件工具、项目说明等,该项目可以直接作为毕设使用。 项目都...

    eclipse RCP 模仿win7资源管理器地址栏功能

    NULL 博文链接:https://c-zhiwu.iteye.com/blog/1852077

    eclipse easyExplorer+OpenExplorer插件

    1.eclipse easyExplorer插件方便打开项目所在的资源管理器中的位置。Eclipse4.4以上版本不能使用easyExplorer,采用OpenExplorer。 2.如果想在Ecipse里打开目录,一直用easyExplorer,可是现在版本升级了...

    人力资源管理系统SSH+MySQL技术

    通过人力资源管理系统可使管理者快速高效地完成企业日常事务中的人事工作,降低人力资源管理的成本,使管理者能集中精力实现企业战略目标。人力资源管理系统的具体目标如下: 对企业人力资源管理的基本信息进行管理...

    Eclipse开发工具使用指南

    Eclipse 是替代IBM Visual Age for Java(以下简称IVJ)的下一代IDE开发环境,但它未来的目标不仅仅是成为专门开发Java程序的...可以无限扩展,而且有着统一的外观,操作和系统资源管理,这也正是Eclipse的潜力所在。

Global site tag (gtag.js) - Google Analytics