欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Eclipse插件开发中的Java项目模型(共12页).doc

    • 资源ID:13943307       资源大小:164.50KB        全文页数:12页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Eclipse插件开发中的Java项目模型(共12页).doc

    精选优质文档-倾情为你奉上Eclipse插件开发中的Java项目模型Eclipse插件开发中的Java项目模型是比较重要的内容,也是我们最长接触到的。本文将详细的为大家讲解Java项目模型。AD: Java项目模型 Eclipse的项目有很多种,包括Java项目、C+项目、C#项目等,每种项目都有自己的特点。我们最常接触到的项目就是Java项目,因此我们重点来讲解一下Java项目模型。Java模型是用来对与创建、编辑和构建Java程序相关联的对象进行建模的一些类。Java模型类是在org.eclipse.jdt.core中定义的。这些类实现资源的特定于Java的行为,并进一步将Java资源分解成模型元素。Java模型的继承结构图如图3.13所示。图3.13  Java模型的继承结构图IJavaElement的子类接口还有IMethod、IType等,在这里没有全部列出。Java模型中的类结构比较简单,级次也非常少。下面介绍一下各个接口的主要方法。(1)   IJavaElementexists:判断元素是否存在。处理Java元素与处理资源对象相似。当使用Java元素时,实际上是在使用某些底层的模型对象的句柄。必须使用exists()来确定元素是否真正存在于工作空间中。getElementName:返回元素的名称。getJavaModel:返回其对应的JavaModel,返回值类型是IJavaModel。getJavaProject:返回元素对应的Java工程,返回值类型是IJavaProject。getParent:返回父元素,返回值类型是IJavaElement。getResource:返回元素对应的资源,返回值类型是IResource。(2)   IClassFile 此接口代表编译后的class二进制文件。isClass:判断是否是Java类。isInterface:判断是否是接口。(3)   ICompilationUnit 此接口代表Java源文件。getAllTypes:返回此文件中定义的所有类型,返回值类型是IType。一个Java文件中可以定义多个类型。getPrimary:返回主类型,返回值类型是ICompilationUnit。(4)   IJavaModel 此接口表示根 Java 元素,对应于工作空间。是所有具有 Java 性质的项目的父类。它对于Java项目的作用和IWorkspaceRoot对于IProject的作用相似。contains:判断是否存在指定的资源。getJavaProject:返回指定名字的Java项目,返回值类型是IJavaProject。getJavaProjects:返回所有的Java项目,返回值类型是IJavaProject。getWorkspace:返回所在的工作空间。(5)   IJavaProject 此接口表示Java项目。IJavaElement findElement(IPath path):返回项目的path路径下的Java元素。IPackageFragment findPackageFragment(IPath path):返回项目的path路径下的IPackageFragment。IPackageFragmentRoot findPackageFragmentRoot(IPath path):返回项目的path路径下的IPackageFragmentRoot。findType:根据一个全名取得此元素的类型,此类有数个重载方法,返回值类型为IType。getAllPackageFragmentRoots:返回所有的IPackageFragmentRoot,返回值类型是IPackageFragmentRoot。getOutputLocation:返回输出路径,返回值类型是IPath。getRequiredProjectNames:返回依赖项目,返回值类型是字符串数组。setOutputLocation:设定输出路径。(6)   IPackageFragment 此接口表示整个包或者包的一部分。createCompilationUnit:创建一个ICompilationUnit,返回值类型是ICompilationUnit。getClassFile:返回指定名称对应的IClassFile,返回值类型是IClassFile。getClassFiles:返回所有的IClassFile,返回值类型是IClassFile。getCompilationUnit:返回指定名称对应的ICompilationUnit,返回值类型是ICompilationUnit。getCompilationUnits:返回所有ICompilationUnit,返回值类型是ICompilationUnit。getKind:判断此包是源码包还是普通包,返回值是int型,如等于IPackage- FragmentRoot.K_SOURCE则是源文件包,如等于IPackageFragmentRoot.K_BINARY则为普通包。hasSubpackages:是否有子包。(7)   IPackageFragmentRoot 此接口表示一组包段,并将各段映射至底层资源,它可以是文件夹、JAR或ZIP文件。createPackageFragment:创建一个IPackageFragment,返回值类型是IPackage- Fragment。getKind:此包段是源码包段还是二进制包段,返回值类型是int,如果等于IPackageFragmentRoot.K_SOURCE则是源文件包段,如果等于IPackageFragment- Root.K_BINARY则为二进制包段。getPackageFragment:根据包名返回对应的IPackageFragment。常用工具类(1)   JavaCore(定义在org.eclipse.jdt.core包下)JavaCore从Plugin继承,它是JDT插件的生命周期管理器。不过对于第三方插件开发人员来说,它的重要性更多地体现在它提供的一些工具类方法中。IJavaElement create(IFile file):从文件创建对应的Java元素。IJavaElement create(IFolder folder):从文件夹创建对应的Java元素。IJavaProject create(IProject project):得到IProject对应的IJavaProject。IJavaElement create(IResource resource):从资源创建对应的Java元素。IJavaModel create(IWorkspaceRoot root):从工作空间根目录得到对应的IJavaModel。IClassFile createClassFileFrom(IFile file):从文件创建对应的IClassFile。ICompilationUnit createCompilationUnitFrom(IFile file):从文件创建对应的ICompilationUnit。style="LINE-HEIGHT: 17.5pt; TEXT-INDENT: 21pt"(2)   JavaUI(定义在org.eclipse.jdt.ui包下)JavaUI中定义了常用的Java插件界面相关的方法。createPackageDialog:创建一个包选择对话框,返回值是SelectionDialog。createTypeDialog:创建一个类型选择对话框,返回值是SelectionDialog。IEditorPart openInEditor(IJavaElement element):用编辑器打开指定的Java元素并返回编辑器实例。revealInEditor(IEditorPart part, IJavaElement element):在编辑器中定位元素element。插件开发中经常会碰到一些常用的技巧,掌握这些技巧可以极大地提高插件的开发效率,并且可以减小插件的体积。下面列出一些常见的技巧。(1)   由一个普通项目得到Java项目Java项目是一种特殊的项目,需要注意的是IJavaProject并不是从IProject继承的。不能将一个IProject对象强制转换成一个IJavaProject对象,也不能把一个IJavaProject实例赋值给IProject变量。由IProject项目得到Java项目的方式:IJavaProject javaPoject = JavaCore.create(IProject); 由IJavaProject得到IProject的方式:调用IJavaProject的IProject getProject();(2)得到工作空间中的所有Java项目我们可以首先得到工作空间中的所有项目,然后逐个进行转换。不过这不免麻烦了一些,下面介绍更好的方式。IJavaModel是所有Java项目的根,通过它就可以得到所有的Java项目:1. IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();  2. IJavaModel jModel = JavaCore.create(root);  3. IJavaProject jProject = jModel.getJavaProjects(); (3)   打开Java编辑器并显示Java编译单元的特定成员代码如下:1. void showMethod(IMember member)   2.     ICompilationUnit cu = member.getCompilationUnit();  3.     IEditorPart javaEditor = JavaUI.openInEditor(cu);  4.     JavaUI.revealInEditor(javaEditor, member);  5.  (4)   在工程下创建一个com.cownew包,并创建一个Hello.java文件(5)   打开【打开类型】对话框以下代码段使用 JavaUI 类来打开【打开类型】对话框:1. new ProgressMonitorDialog(parent),   2. SearchEngine.createWorkspaceScope(), 用类似方法还可以创建【打开包】和【打开主要类型】对话框。(6)   打包指定的文件我们写一些工具的时候也许需要把文件打成jar包,然后进行发布到应用服务器等操作,调用JDT提供的类可简化这个操作(用到的打Jar包的类都在org.eclipse.ui.jarpackager下):1. JarPackageData description= new JarPackageData();  2. IPath location= new Path("C:/cownew.jar");  3. description.setJarLocation(location);  4. description.setSaveManifest(true);  5. description.setManifestMainClass(mainType);  6. description.setElements(filestoExport);  7. IJarExportRunnable runnable=   8. description.createJarExportRunnable(parentShell);  9. new ProgressMonitorDialog(parentShell).run(true,true, runnable); 参数mainType表示Jar包的main类,filestoExport为要打包的文件。(7)   自动设置Java项目的构建路径有一些插件会将需要的jar包自动设置到构建路径上,比如使用WTP的新建向导新建web项目的时候就会把web开发需要的jar包自动放入项目的构建路径,使用PDE的“将项目转换为插件项目”功能后项目的构建路径中就增加了插件依赖项的库。那么它们是怎么实现的呢?Java项目的构建路径有如下几种:源文件夹、二进制库、依赖项目、类路径变量和类路径容器。图3.14  源文件夹图3.15  构建依赖项目图3.16  Jar和类文件夹依赖每种不同的构建路径都有不同的作用:源文件夹是把源码进行构建的途径,二进制库是导入少量jar包的方式,依赖项目是供多项目分模块开发使用的,使用类路径变量可以避免二进制包的路径依赖,而类路径容器则为大量二进制库的引入提供了方便。JDT为这些不同的构建路径提供了一个统一的接口:IClassPathEntry,只要调用IJavaProject的setRawClasspath方法就可以为项目设定构建路径。可以看到setRawClasspath方法需要一个IClasspathEntry数组,数组中的元素就是要设置的每一个构建路径。前面提到的JavaCore类提供了一系列的静态方法来帮助我们生成不同的IClasspathEntry,而无须关注生成的细节。下面来看不同构建路径的添加方式。  源文件夹。使用JavaCore.newSourceEntry方法。下面的代码的作用是构造项目MyProject的源文件夹src的类路径条目:JavaCore.newSourceEntry(new Path("/MyProject/src");  二进制库IClasspathEntry。使用JavaCore.newLibraryEntry 方法。下面的代码就是构造MyProject的类文件lib的类路径条目: Path("/MyProject/lib"),null, null,false);   以下类路径条目具有源代码连接:设定关联源代码包有利于代码的跟踪调试。    依赖项目。使用JavaCore.newProjectEntry方法。下面的代码就是构造依赖项目MyFramework:IClassPathEntry prjEntry = JavaCore.newProjectEntry(new Path("/MyFramework"), true);   类路径变量。使用JavaCore.newVariableEntry方法。类路径变量对于整个工作空间来说是全局的,并且可以通过 JavaCore 方法 getClasspathVariable 和 setClasspathVariable 来处理。可能会注册自动的类路径变量初始化方法,当启动工作空间时,通过扩展点 org.eclipse. jdt.core.classpathVariableInitializer来调用该类路径变量初始化方法。以下类路径条目指示一个库,该库的位置存放在变量HOME中。使用变量SRC_HOME和SRC_ROOT来定义源代码连接: IClassPathEntry varEntry = JavaCore.newVariableEntry(    new Path("HOME/foo.jar"), /库路径    new Path("SRC_HOME/foo_src.zip"), /源码归档路径    new Path("SRC_ROOT"), /源码归档根路径    true); JavaCore.setClasspathVariable("HOME", new Path("d:/myInstall"), null);     类路径容器。通过 JavaCore的getClasspathContainer和setClasspathContainer两个方法来处理类路径容器。 可能会注册一个自动的类路径容器初始化方法,当需要绑定容器时,通过扩展点 org.eclipse.jdt.core.classpathContainerInitializer来被动地调用类路径容器初始化方法。以下类路径条目指示系统类库容器:1. IClassPathEntry varEntry = JavaCore.newContainerEntry(  2.                           new Path("JDKLIB/default"),false);  3. JavaCore.setClasspathContainer(  4. new Path("JDKLIB/default"),  5. new IJavaProject myProject ,   6.         new IClasspathContainer   7.              new IClasspathContainer()   8.                  public IClasspathEntry getClasspathEntries()   9.                      return new IClasspathEntry  10.                          JavaCore.newLibraryEntry(  11. new Path("d:/rt.jar"), null, null, false);  12.                         13.                    14.                  public String getDescription()    15. return "Basic JDK library container"   16.                  public int getKind()  return IClasspathContainer.K_SYSTEM;   17.                  public IPath getPath()  return new Path("JDKLIB/basic");   18.                           19.         ,   20. null);    我们只要调用相应的方法创建我们的类路径条目就可以了,然后把这些条目组成的数组通过setRawClasspath方法设定到项目中。需要注意的是如果我们只把要添加的类路径条目传入 setRawClasspath方法的话,就会替换原有的项目构建路径,这常常是我们不希望的。可以调用IJavaProject的 readRawClasspath方法读取项目已有的设置,把我们要设置的构建路径添加到它的后面,然后再调用setRawClasspath方法设定新的项目构建路径。在这个例子中,将要实现一个“为项目添加 lucene支持”的功能,用户在项目上右击,选择菜单中的【为项目添加lucene支持】命令以后,插件就会把lucene的jar包和源码包复制到项目的lib目录下,并且将jar包加入构建路径。如图3.17所示为增加lucene支持前的项目结构。图3.17  增加lucene支持之前的项目结构用户在项目上右击,在弹出的快捷菜单中选择【为项目添加lucene支持】命令后的项目结构如图3.18所示。图3.18  增加lucene支持之后的项目结构图3.19是项目的构建路径。图3.19  增加的lucene包首先新建一个插件工程,并将JDT相关的依赖项加入。然后添加一个org.eclipse.ui.popupMenus的扩展点,如果不熟悉怎么添加,可以使用插件向导中的“弹出菜单”向导。需要注意contribution的配置,如图3.20所示。图3.20  contribution的配置此插件只针对Java项目起作用,因此 objectClass中填入org.eclipse.jdt.core.IJavaProject;adaptable选择true;如果是用向导生成的那么请记住清空nameFilter。下面是核心类ActionAddLucene的实现代码:1. System.getProperty("file.separator","/");  2. JavaCore.newLibraryEntry(project  3. .getFullPath(), project  4. LUCENESRCJAR).getFullPath(), null,  5.  new IClasspathEntryoldPaths.length + 1;  6. LIB + FILESEPARATOR + LUCENEJAR);  7. LIB + FILESEPARATOR + LUCENESRCJAR);  8. IClasspathEntry entry)  9. e.getMessage(), e); 下面解释一下代码中的重点部分。1. IClasspathEntry oldPaths = javaProject.readRawClasspath(); 读取项目原有的构建路径条目。1. IClasspathEntry luceneLibEntry = JavaCore.newLibraryEntry(  2. project.getFile(LIB + FILESEPARATOR + LUCENEJAR).getFullPath(),   3. project.getFile(LIB + FILESEPARATOR + LUCENESRCJAR).getFullPath(),  4. null, false);    这一句构建lucene的jar包。第1个参数是二进制jar包的位置,我们的二进制jar包的位置为项目路径下的lib/lucene-1.4.3-src.jar。第2个参数是jar包对应的源码包的位置。第3个参数为源码包的根路径,因为有的源码jar包的源码根路径不是jar包的根路径,比如simplejta的源码jar包的格式如图3.21所示。图3.21  Jar包的结构对于这种情况就要指定第2个参数为“src”,lucene的源码包的源码根路径就是jar包的根路径,因此我们设置此参数为null。第4个参数表示是否导出,我们设置为false。(3)   URL luceneLib = Activator.getDefault().getBundle().getEntry(RESOUCELIB + FILE- SEPARATOR + LUCENEJAR);我们把“lucene-1.4.3.jar”、 “lucene-1.4.3-src.jar”放到我们插件的“resoucelib”目录下,当用户单击【为项目添加lucene支持】的时候要把这两个文件复制到项目的lib目录下,因此需要首先读取插件路径“resoucelib”目录下的这两个jar包。读取插件路径下的文件时我们使用插件Activator类提供的方法即可,比如如下调用:就可以读取到插件根目录下的文件“config/my.xml”,返回类型是.URL。(4)   copyURLToFile(luceneLib, project, LIB + FILESEPARATOR + LUCENEJAR);Activator.getDefault().getBundle().getEntry读取到的文件位置是URL类型的,我们需要把这个URL对应的文件复制到项目的lib下。下面看一下copyURLToFile的主干代码:URL类有一个openStream可以打开文件的输入流,IFile也有一个接受输入流的create方法用来创建文件,因此我们只需要把url的输入流输出给IFile的create方法即可。这里我们也可以由url得到其对应的磁盘上的路径,也可以得到IFile对应的磁盘上的路径,然后使用Java IO来进行文件复制操作。但是这样做不仅代码数量变多了,而且由于使用的不是Eclipse的资源管理API,会带来无法自动刷新等问题,因此建议尽量使用Eclipse提供的API来完成此功能。学习Eclipse插件开发的最好的方式就是研读 Eclipse的源码,而对插件开发者最有参考价值的就是JDT(Java Development Tools)的代码,相信把所有的包研读一遍以后就会成为插件开发的高手了。下面是各个主要包的内容,读者可以根据需要有选择地进行研读。· · · · · · · · · · · · · · · · · · · · 专心-专注-专业

    注意事项

    本文(Eclipse插件开发中的Java项目模型(共12页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开