首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

Eclipse资源管理(2)

2012-06-30 
Eclipse资源管理(二)?IProject中的Builder与Nature1.创建一个新的工程如下是创建一个新的工程的代码,但是

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               name="code">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"; @Overridepublic void configure() throws CoreException {    ProjectUtil.addBuilderToProject(project,              new String[] { LengIncrementalProjectBuilder.ID }, null);  }@Overridepublic void deconfigure() throws CoreException {    ProjectUtil.removeBuilderFromProject(project,              new String[] { LengIncrementalProjectBuilder.ID }, null);  }@Overridepublic IProject getProject() {return project;}/** * setProject()和configure()的调用顺序是先调setProject()后调configure(). */@Overridepublic 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               name="code">public class LengIncrementalProjectBuilder extends IncrementalProjectBuilder {public static final String ID = "com.leng.test.project.nature.LengIncrementalProjectBuilder";public LengIncrementalProjectBuilder() {}@Overrideprotected 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;}@Overrideprotected void startupOnInitialize() {super.startupOnInitialize();}/** * 清除一些保留且无用的东西 */@Overrideprotected 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里面都有构建方法,只要获取到相关对象就可以进行构建。

?

热点排行