Project Natures

【无机纳米材料科研制图——OriginLab 0205】Origin对BET吸附/脱附曲线及孔径分布制图... 此篇,我们来分享如何对BET数据进行处理和制图。 一、等温吸脱附曲线绘制 1)找到等温吸脱附文件。 一半来说,对一个样品测一次BET,会产生很多数据,具体因仪器而异。我这里的数据主要有两个文件夹,一个脱附,一个吸附,吸附文件夹中多了一个等温吸脱附的文件夹。而这... 阅读详情
 
在Eclipse平台中使用nature来描述工程的类型,查看工程根目录下的.project文件,会发现是用于标记工程类型的标签<nature>,比如java工程的标记为:
 
……
<nature>org.eclipse.jdt.core.javanature</nature>
……
 
一个project往往拥有多个nature,例如一个Plug-in开发工程同时拥有Java Nature(JDT)和Plugin Nature(PDE)等。
所有的nature都是一个实现了扩展点org.eclipse.core.resources.natures的插件,在插件中可以自定义工程增加或者删除该nature所需要执行的动作。下面我们用一个简单的例子来说明上面的问题。
 
案例说明:
       假设现在需要开发一个实体维护的插件。所有实体的定义保存在若干个分散的XML文件中,实体之间往往会有关联关系,比如我们在编辑实体A时,需要查看A关联的实体B的一些信息,如果此刻去扫描工程目录下的XML文件来查找实体B的信息是不可取的,因为无论性能还是效率上都很难满足要求,所以需要在工程打开的时候就能预先缓存所有的实体信息。这样就引入了两个问题:
  • Workspace下有多个工程,如何知道哪个工程是需要缓存实体信息的?
  • 何时执行缓存动作?何时销毁缓存?
Natures能够很好的解决上面的问题。
 
实现Nature
1.         首先增加一个新的org.eclipse.core.resources.natures扩展点:
<extension
   point="org.eclipse.core.resources.natures"
   id="entityNature"
   name="Entity Nature">
   <runtime>
      <run class="com.company.natures.EntityNature">
      </run>
   </runtime>
</extension>
 
2.         Run class实现
编写实现类com.company.natures.EntityNature,注意类EntityNature必须实现接口org.eclipse.core.resources.IProjectNature
 
 
configure()和deconfigure()方法分别为工程被设置和删除该nature时会执行的动作,对应我们的实现分别为对实体的缓存和删除实体缓存操作。
 
给工程设置Nature
上面我们已经定义好了entityNature,但如何给工程设置此nature呢?请看如下方法:
 
publicvoid setEntityNature(IProject project){
        try {
              IProjectDescription description = project.getDescription();
              String[] natures = description.getNatureIds();
              String[] newNatures = new String[natures.length + 1];
              System.arraycopy(natures, 0, newNatures, 0, natures.length);
              newNatures[natures.length] = "com.company.natures.entityNature";
              description.setNatureIds(newNatures);
              project.setDescription(description, null);
           } catch (CoreException e) {
              e.printStackTrace();
           }
    }
 
如果判断这个工程是否是一个实体工程,这里给出一种实现:
 
publicboolean hasEntityNature(IProject project){
        try {
            return project.hasNature(“com.company.natures.entityNature”);
        } catch (CoreException e) {
            e.printStackTrace();
        }
        returnfalse;
    }
 
注意:
nature的全局唯一ID是由“插件的ID”加上“natures扩展中定义的ID”组合而成的。 例如上面的”com.company.natures.entityNature”= “com.company.natures “(Plug-in id) + ”.” + ”entityNature”(nature id)。
 
Nature的依赖
       先前已经说过了一个project可能拥有多个nature,现实中这些nature之间可能会有依赖关系,例如一个project如果包含Entity Nature的话,同时也需要包含Java Nature:即如果一个工程如果是一个实体工程的话,那么它也一定是一个java工程。
修改我们的Plug-in描述文件如下:
 
<extension
   point="org.eclipse.core.resources.natures"
   id="entityNature"
   name="Entity Nature">
   <runtime>
      <run class="com.company.natures.EntityNature">
      </run>
   </runtime>
   <requires-nature id="org.eclipse.jdt.core.javanature"/>
</extension>
 
可以看到增加requires-nature标签表明该nature需要依赖哪些其他的nature,这时需要修改先前的setEntityNature()方法以支持对多个nature组合的合法性验证:
 
publicvoid setEntityNatureWithValidate(IProject project,Workspace workspace){
        try {
              IProjectDescription description = project.getDescription();
              String[] natures = description.getNatureIds();
              String[] newNatures = new String[natures.length + 1];
              System.arraycopy(natures, 0, newNatures, 0, natures.length);
              newNatures[natures.length] = "com.company.natures.entityNature";
             
              IStatus status = workspace.validateNatureSet(natures);
              if (status.getCode() == IStatus.OK) {//check
                 description.setNatureIds(newNatures);
                 project.setDescription(description, null);
              } else {
                 // TODO提醒用户
              }
              description.setNatureIds(newNatures);
              project.setDescription(description, null);
           } catch (CoreException e) {
              e.printStackTrace();
           }
    }
 
Workspace.validateNatureSet(String[] natureIds)方法主要做如下几项验证工作:
  • natureIds所有的nature已经被注册
  • natureIds中所有nature依赖的nature已经包含在natureIds
  • natureIds中所有nature之间没有循环依赖关系
  • natureIds中没有重复的nature
 
Nature 描述信息
在运行时如何根据nature id得到该nature相关的信息呢?
通过IWorkspace.getNatureDescriptor(String natureId)方法可以获得指定nature的描述信息,接口IProjectNatureDescriptor正是对natrue描述信息的抽象。
 
IProjectNatureDescriptor descriptor = workspace.getNatureDescriptor( "com.example.natures.myOtherNature" );
 
当然,也可以取得当前workspace所有nature的描述信息:
 
IProjectNatureDescriptor[] descriptors = workspace.getNatureDescriptors();
 
 
【黑马点评优化】2-Canel实现多级缓存(Redis+Caffeine)同步 阅读详情

相关推荐

DySAT+: Enhancing Dynamic Graph Representation Learning with Multi-Head Self-Attention and Temporal-

本文深入探讨了DySAT+模型在动态图表示学习中的创新应用,通过多头时空注意力机制和层级信息融合策略,有效解决了动态图数据中的时间维度信息捕捉和结构演变动态适应问题。该模型在社交网络异常检测和金融交易网络分析等场景中表现出色,显著提升了预测准确率和响应速度。

weixin_29035405的博客 315

Eclipse rcp 添加项目nature

Eclipse中的项目有很多种,比如Java项目,C++项目,WTP项目,Python项目,这些项目的不同之处是每种项目都有自己不同的特性,为了方便地标识和辨认这些特性,Eclipse为项目维护了一个特性标识数组,插件只要读取这个数组就知道此项目是否拥有某个特性。比如Java相关的插件如果在非Java项目中被调用,由于项目没有Java特性,所以调用就会不成功了。   一般在新建项目的时候初始化

都市小混混 2119

使用Transformer实现自动调制识别(RML2016a)

image_size = 128 # resize重置输入大小patch_size = 2 # 从输入图片(信号看作图片)中将被提取的块大小# 分成 num_patches 个块num_patches = (image_size // patch_size) #(72/6)**2 横着裁剪),],return x)(x1, x1)# MLP.# Add MLP.x=x_train,y=y_train,filepath,round。

QAQIknow的博客 6223

rcp(插件开发)org.eclipse.core.resources.natures 扩展

Project natures allow a plug-in to tag a project as a specific kind of project. For example, the Java development tools (JDT) use a Java nature to add Java-specific behavior to projects.  Project natu

Hello Eclipse Plugin 黑夜 1759

j2ee的web工程,.project文件中,<nature></nature>作用

1.project文件如下: AccidentAnalysisService org.eclipse.jdt.core.javabuilder org.eclipse.wst.common.project.facet.core.builder org.eclipse.wst.validation.validationbuilder

Ideality_hunter的专栏 3439

使用eclipse将原有tomcat插件工程调整为的Dynamic Web Module工程(保姆级教程)

八步完成“tomcat插件工程”向“Dynamic Web Module工程”的迁移。

先尝试后决策,天道酬勤 733

Eclipse插件开发Nature篇

介绍 本文将介绍如何创建自己的项目特性(nature)。什么是项目特性呢?比如你新建一个Java工程,这个项目的图标右上角就会有个J的标志;如果是个Maven工程呢,在左上角还有有一个M标志。简单来说,项目特性就是用来对不同项目的区分。Nature会关联Builder,那什么是Bui...

chuannaoxuan4674的博客 472

Project Builders and Natures In Eclipse

Project natures allow a plug-in to tag a project as a specific kind of project. For example, the Java development tools (JDT) use a "Java nature" to add Java-specific behavior to projects.  Project na...

James Blog 381

在MyEclipse 中将Java Project 转换成Web Project

此添加方法是针对MyEclipse中添加的: 编辑工程的.project文件: 添加 com.genuitec.eclipse.ast.deploy.core.deploymentnature com.genuitec.eclipse.j2eedt.core.webnature 到 … eg. 例如将 org.eclipse...

anyhow1234的专栏 139

没有Project Facets的解决方法

解决步骤: 1、进入项目目录,可看到.project文件,打开。 2、找到...代码段。 3、在第2步的代码段中加入如下标签内容并保存: org.eclipse.wst.common.project.facet.core.nature org.eclipse.wst.common.modulecore.ModuleCoreNature org.eclipse.jem.workbench

sz_bdqn的专栏 6144

project facets java转成web项目

前言:   用Eclipse开发项目的时候,把一个Web项目导入到Eclipse里会变成了一个Java工程,将无法在Tomcat中进行部署运行。   方法:   1.找到.project文件,找到里面的标签,查看是否有下面的代码,没有则复制进去。   Xml代码 nature>org.eclipse.wst.common.project.facet.core.natu

只作为个人备忘录 5710

project facets java转成web项目

前言:   用Eclipse开发项目的时候,把一个Web项目导入到Eclipse里会变成了一个Java工程,将无法在Tomcat中进行部署运行。   方法:   1.找到.project文件,找到里面的标签,查看是否有下面的代码,没有则复制进去。   Xml代码 nature>org.eclipse.wst.common.project.facet.core.natu

mmmelody的博客 637

Eclipse 中 将Java Project 转换为Dynamic Web Project

<br /> <br />Eclipse 中 将Java Project 转换为Dynamic Web Project<br />1. 修改项目的.project文件,保存,不记得是否需要重启Eclipse了。<br />     在<natures><br />          …<br />       </natures> <br />之间添加下列三行配置 <br /><nature>org.eclipse .wst.common.project.facet.core.nature</nat

搜索引擎、个性化推荐、大数据相关学习笔记| 1055

Eclipse报错: “this compilation unit is not on the build path of a java project”,同时按住Ctrl左击不跳转问题

问题情境描述:我用在eclipse官网下载最新的eclipse(Mars2版)64位,用eclipse自带的git插件导入gitbli上的maven项目,系统和eclipse中的tomcat(8.0)、JDK(1.7)、maven(3.3.9)配置完毕。 发现按住Ctrl左击选中的变量,不跳转!!! 问题初探:网上也查了,说是buildpath问题,按照百度的步骤说明试过了,还是没解决问题

透明大脑 2万+

Eclipse中project项目转web项目

项目被搭建成了project项目,感觉很别扭,所以,手动进行了一下转换,具体步骤如下: 1.进入项目目录,可看到.project文件,打开,找到...代码段。 2.将如下代码加入到其中org.eclipse.wst.common.project.facet.core.nature org.eclipse.wst.common.modulecore.ModuleCoreNature or...

chilongxph2的博客 275

eclipse里没有project facets

我下载的eclipse版本问题,导入maven工程可以显示DynamicwebModule。新建maven工程之后,点击工程属性里没有projectfacets,从而没有配置DynamicwebModule。解决方法:1、打开项目根目录下的.project<buildSpec>节点下是否存在以下内容,没有则加入<buildCommand><name&...

weixin_33872660的博客 163

Myeclipse project转换为eclipse project的正确方法(Myeclipse8.5版本转到eclipse java ee juno)

在eclipse中导入Myeclipse项目 修改eclipse工程下的.project文件 删除这一段 org.eclipse.wst.jsdt.core.javascriptValidator 在中加入 Java code 1 2 3 4        org.eclipse.ws

MAKE THE CHANGE 3025

myeclipse/eclipse没有Project Facets的解决方法

http://www.cnblogs.com/jerome-rong/archive/2012/12/18/2822783.html 经常在eclipse中导入web项目时,出现转不了项目类型的问题,导入后就 是一个java项目,有过很多次经历,今天也有同事遇到类似问题,就把这个解决方法记下来吧,免得以后再到处去搜索。 解决步骤: 1、进入项目目录,可看到.project文件,打开。 2、...

weixin_30443895的博客 96

SAR.rar_SAR radar _matlab SAR回波_回波信号算法_多普勒雷达

SAR多普勒成像算法matlab实现以及逆合成孔径雷达回波信号成像

专业的短剧剧本创作skill,从选题立项到分集撰写、质量自检、合规审核、海外出海,覆盖短剧剧本生产全流程。.zip

一句话:试错成本越来越高,提示词的重要性从来没有像今天这样大。Seedance 2.0 Storyboard Generator 开源剧情剧本Skill工具,帮佬友一键写好剧本 - 将小说/故事转化为多集视频。 为什么做这个? 因为 seedance2 已经改变了一切,需要新的剧本剧情制作工具,更好的利用新AI的能力和更方便的制作短剧

上一篇: MEMCACHED 安装篇
下一篇: Project Class Loader
Dato
博客等级 码龄24年 2粉丝 7原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值