2009-12-04 21:32:16|  分类: Eclipse PDE|字号 订阅

在上一篇中,我们已经建立了一个向导想生成项目,这一篇中将介绍怎样在Eclipse透视图中建立一个项目及所需的东西。
首先,我们在向导点击Finish完后,然后生成一个项目,如图:

这里就不多说了,贴出代码出来:


  1      /**
  2      *  @see  org.eclipse.jface.wizard.Wizard#performFinish()
  3       */
  4      public   boolean  performFinish()  {
  5         createJavaProject();
  6          if  (_newProject  ==   null )  {
  7              return   false ;
  8         }   else   {
  9             updatePerspective();
 10             selectAndReveal(_newProject);
 11              return   true ;
 12         }
 13     }
 14
 15      /**
 16      * 创建一个Java项目
 17       */
 18      public   void  createJavaProject()  {
 19         _newProject  =  createNewProject();
 20         IJavaProject ijavaproject  =  JavaCore.create(_newProject);
 21          try   {
 22             createOutputLocation(ijavaproject);
 23             addJavaBuilder(ijavaproject);
 24             setClasspath(ijavaproject);
 25             _newProject.build(IncrementalProjectBuilder.FULL_BUILD,  null );
 26         }   catch  (JavaModelException e)  {
 27             e.printStackTrace();
 28         }   catch  (CoreException e)  {
 29             e.printStackTrace();
 30         }
 31     }
 32
 33      /**
 34      * 创建一个新项目
 35      * 
 36      *  @return
 37       */
 38      private  IProject createNewProject()  {
 39          if  (_newProject  !=   null )
 40              return  _newProject;
 41
 42          //  得到一个项目的句柄
 43          final  IProject newProjectHandle  =  _mainPage.getProjectHandle();
 44
 45          //  得到一个项目的描述
 46         IPath newPath  =   null ;
 47          if  ( ! _mainPage.useDefaults())
 48             newPath  =  _mainPage.getLocationPath();
 49
 50         IWorkspace workspace  =  ResourcesPlugin.getWorkspace();
 51          final  IProjectDescription description  =  workspace
 52                 .newProjectDescription(newProjectHandle.getName());
 53         description.setLocation(newPath);
 54
 55          //  增加Java Nature,否则在ijavaproject.setOutputLocation这句就会出错
 56         addJavaNature(description);
 57
 58          //  创建一个项目的操作
 59         WorkspaceModifyOperation op  =   new  WorkspaceModifyOperation()  {
 60              protected   void  execute(IProgressMonitor monitor)
 61                      throws  CoreException  {
 62                 createProject(description, newProjectHandle, monitor);
 63             }
 64         } ;
 65
 66          //  运行一个新的项目操作,即会执行op中的execute方法
 67          try   {
 68             getContainer().run( true ,  true , op);
 69         }   catch  (InterruptedException e)  {
 70              return   null ;
 71         }   catch  (InvocationTargetException e)  {
 72              return   null ;
 73         }
 74
 75         _newProject  =  newProjectHandle;
 76
 77          return  _newProject;
 78     }
 79
 80      /**
 81      * 增加Java的Nature
 82      * 
 83      *  @param  iprojectdescription
 84       */
 85      private   void  addJavaNature(IProjectDescription iprojectdescription)  {
 86         ArrayList arraylist  =   new  ArrayList();
 87         arraylist.addAll(Arrays.asList(iprojectdescription.getNatureIds()));
 88         arraylist.add( " org.eclipse.jdt.core.javanature " );
 89         iprojectdescription.setNatureIds((String[]) arraylist
 90                 .toArray( new  String[arraylist.size()]));
 91     }
 92
 93      /**
 94      * 创建一个新项目
 95      * 
 96      *  @param  description
 97      *  @param  projectHandle
 98      *  @param  monitor
 99      *  @throws  CoreException
100      *  @throws  OperationCanceledException
101       */
102      private   void  createProject(IProjectDescription description,
103             IProject projectHandle, IProgressMonitor monitor)
104              throws  CoreException, OperationCanceledException  {
105          try   {
106             monitor.beginTask( "" ,  2000 );
107
108             projectHandle.create(description,  new  SubProgressMonitor(monitor,
109                      1000 ));
110
111              if  (monitor.isCanceled())
112                  throw   new  OperationCanceledException();
113
114             projectHandle.open(IResource.BACKGROUND_REFRESH,
115                      new  SubProgressMonitor(monitor,  1000 ));
116
117         }   finally   {
118             monitor.done();
119         }
120     }
121
122      /**
123      * 创建输出文件
124      * 
125      *  @param  ijavaproject
126      *  @throws  JavaModelException
127      *  @throws  CoreException
128       */
129      private   void  createOutputLocation(IJavaProject ijavaproject)
130              throws  JavaModelException, CoreException  {
131         IFolder ifolder  =  ijavaproject.getProject().getFolder( " bin " );
132         createFolder(ifolder);
133         IPath ipath  =  ifolder.getFullPath();
134         ijavaproject.setOutputLocation(ipath,  null );
135     }
136
137      /**
138      * 增加Java生成器
139      * 
140      *  @param  ijavaproject
141      *  @throws  CoreException
142       */
143      private   void  addJavaBuilder(IJavaProject ijavaproject)  throws  CoreException  {
144         IProjectDescription iprojectdescription  =  ijavaproject.getProject()
145                 .getDescription();
146         ICommand icommand  =  iprojectdescription.newCommand();
147         icommand.setBuilderName( " org.eclipse.jdt.core.javabuilder " );
148         iprojectdescription.setBuildSpec( new  ICommand[]  { icommand } );
149         iprojectdescription
150                 .setNatureIds( new  String[]  {  " org.eclipse.jdt.core.javanature "  } );
151         ijavaproject.getProject().setDescription(iprojectdescription,  null );
152     }
153
154      /**
155      * 设置Classpath
156      * 
157      *  @param  ijavaproject
158      *  @throws  JavaModelException
159      *  @throws  CoreException
160       */
161      private   void  setClasspath(IJavaProject ijavaproject)
162              throws  JavaModelException, CoreException  {
163         ijavaproject.setRawClasspath( new  IClasspathEntry[ 0 ],  null );
164         addSourceFolders(ijavaproject);
165         addJRELibraries(ijavaproject);
166         addCodeGenLibraries(ijavaproject);
167     }
168
169      /**
170      * 增加JRE库
171      * 
172      *  @param  ijavaproject
173      *  @throws  JavaModelException
174       */
175      private   void  addJRELibraries(IJavaProject ijavaproject)
176              throws  JavaModelException  {
177         ArrayList arraylist  =   new  ArrayList();
178         arraylist.addAll(Arrays.asList(ijavaproject.getRawClasspath()));
179         arraylist.addAll(Arrays.asList(PreferenceConstants
180                 .getDefaultJRELibrary()));
181         ijavaproject.setRawClasspath((IClasspathEntry[]) arraylist
182                 .toArray( new  IClasspathEntry[arraylist.size()]),  null );
183     }
184
185      /**
186      * 增加代码生成中所需要的Jar库
187      * 
188      *  @param  ijavaproject
189      *  @throws  JavaModelException
190       */
191      private   void  addCodeGenLibraries(IJavaProject ijavaproject)
192              throws  JavaModelException  {
193 //         TODO:添加代码生成项目中所需要的Jar包
194     }
195
196      /**
197      * 增加多个源文件目录
198      * 
199      *  @param  ijavaproject
200      *  @throws  JavaModelException
201      *  @throws  CoreException
202       */
203      private   void  addSourceFolders(IJavaProject ijavaproject)
204              throws  JavaModelException, CoreException  {
205         ArrayList arraylist  =   new  ArrayList();
206         arraylist.addAll(Arrays.asList(ijavaproject.getRawClasspath()));
207         addSourceFolder(ijavaproject, arraylist,  " src/java " );
208         addSourceFolder(ijavaproject, arraylist,  " src/resource " );
209         ijavaproject.setRawClasspath((IClasspathEntry[]) arraylist
210                 .toArray( new  IClasspathEntry[arraylist.size()]),  null );
211     }
212
213      /**
214      * 增加源文件目录
215      * 
216      *  @param  ijavaproject
217      *  @param  arraylist
218      *  @param  s
219      *  @throws  CoreException
220       */
221      private   void  addSourceFolder(IJavaProject ijavaproject,
222             ArrayList arraylist, String s)  throws  CoreException  {
223         IFolder ifolder  =  ijavaproject.getProject().getFolder(s);
224         createFolder(ifolder);
225         IPackageFragmentRoot ipackagefragmentroot  =  ijavaproject
226                 .getPackageFragmentRoot(ifolder);
227         arraylist.add(JavaCore.newSourceEntry(ipackagefragmentroot.getPath()));
228     }
229
230      /**
231      * 创建一个文件夹
232      * 
233      *  @param  ifolder
234      *  @throws  CoreException
235       */
236      private   void  createFolder(IFolder ifolder)  throws  CoreException  {
237         IContainer icontainer  =  ifolder.getParent();
238          if  (icontainer  !=   null   &&   ! icontainer.exists()
239                  &&  (icontainer  instanceof  IFolder))
240             createFolder((IFolder) icontainer);
241         ifolder.create( true ,  true ,  null );
242     }
243
244      /**
245      *  @see  org.eclipse.jface.wizard.Wizard#addPages()
246       */
247      public   void  addPages()  {
248          super .addPages();
249         _mainPage  =   new  WizardNewProjectCreationPage( " 海迈平台-代码生成 " );
250         _mainPage.setTitle( " 创建一个代码生成项目框架 " );
251         _mainPage.setDescription( " 创建一个代码生成项目框架 " );
252         addPage(_mainPage);
253     }
254
255      /**
256      * 更新Eclipse的透视图
257       */
258      protected   void  updatePerspective()  {
259          try   {
260             IWorkbenchPage iworkbenchpage  =  PlatformUI.getWorkbench()
261                     .getActiveWorkbenchWindow().getActivePage();
262              if  (iworkbenchpage.findView( " org.eclipse.ui.views.PropertySheet " )  ==   null )
263                 iworkbenchpage.showView( " org.eclipse.ui.views.PropertySheet " );
264         }   catch  (PartInitException partinitexception)  {
265             partinitexception.printStackTrace();
266         }
267     }
268
269      /**
270      *  @param  iresource
271       */
272      protected   void  selectAndReveal(IResource iresource)  {
273         selectAndReveal(iresource, _workbench.getActiveWorkbenchWindow());
274     }
275
276      /**
277      * 选择该项目并显示出来
278      * 
279      *  @param  iresource
280      *  @param  iworkbenchwindow
281       */
282      private   void  selectAndReveal(IResource iresource,
283             IWorkbenchWindow iworkbenchwindow)  {
284         BasicNewResourceWizard.selectAndReveal(iresource, iworkbenchwindow);
285     }

在创建新项目的时候,要给项目描述类增加一个Java Nature,具体这个Java Nature是什么意思我不太懂。Eclipse里面很多都采用Adopter模式,所以在WorkspaceModifyOperation中的execute方法是创建项目的核心。其他可以参考代码。相信不是很难理解。
友情小贴士:
   1.在点击“完成”按钮后,调用PerformFinish方法。

2.创建一个项目的时候,可以根据page来得到Project句柄,再根据ResourcesPlugin.getWorkspace();来得到工作区,由于每个工作区都含有多个不同插件的描述,可以从工作区创建一个项目描述:workspace .newProjectDescription(newProjectHandle.getName());并设置相应的路径(可以从Page中得到),并为项目描述增加一些必要的信息,如JavaNature。真正创建项目: projectHandle.create(description, new SubProgressMonitor(monitor,1000), projectHandle.open(IResource.BACKGROUND_REFRESH,new SubProgressMonitor(monitor, 1000));

3.为项目设置Java编译器,

ICommand icommand = iprojectdescription.newCommand();

icommand.setBuilderName("org.eclipse.jdt.core.javabuilder");

iprojectdescription.setBuildSpec(new ICommand[] { icommand });

4.为项目设置源路径

ArrayList arraylist = new ArrayList();

arraylist.addAll(Arrays.asList(ijavaproject.getRawClasspath()));

addSourceFolder(ijavaproject, arraylist, "src/java");

addSourceFolder(ijavaproject, arraylist, "src/resource");

ijavaproject.setRawClasspath((IClasspathEntry[]) arraylist.toArray(new IClasspathEntry[arraylist.size()]), null);

5.更新透视图

1            IWorkbenchPage iworkbenchpage = PlatformUI.getWorkbench()

2                    .getActiveWorkbenchWindow().getActivePage();

3            if (iworkbenchpage.findView("org.eclipse.ui.views.PropertySheet") == null)

4                iworkbenchpage.showView("org.eclipse.ui.views.PropertySheet");

6.显示项目出来

BasicNewResourceWizard.selectAndReveal(iresource, iworkbenchwindow);

原文:http://secyaher.blog.163.com/blog/static/3895577200911493216157/

代码生成器插件开发---代码生成项目框架的创建(2)相关推荐

  1. JavaScript 项目构建工具 Grunt 实践:安装和创建项目框架

     Grunt 是一个基于任务的 JavaScript 项目命令行构建工具,运行于 Node.js 平台.Grunt 能够从模板快速创建项目,合并.压缩和校验 CSS & JS 文件,运行单元测 ...

  2. ExtAspNet学习-利用AppBox框架快速创建项目(五)—完成项目含源代码

    我们前边四个部分已经完成了框架需要的基础配置, 现在我们来完成项目 1.Subsonic 配置,首先在OraSurvey.DAO中添加App.config配置相关信息 View Code 1 < ...

  3. 自学Python第二十二天- Django框架(一)创建项目、APP、快速上手、请求和响应流程、模板、数据库操作

    Django 框架是一个基于 python 的重量级的 web 开发框架,现今很多大公司大项目都是使用 Django 框架.采用了 MVC(model view controller) 的框架模式,p ...

  4. 全能代码生成器,自动生成前后端代码、生成项目框架、生成JavaBean、生成数据库文档、自动化部署项目(TableGo v8.0.0)

    TableGo_20220801 v8.0.0 正式版发布,此次版本累计更新如下:  1.生成项目功能新增支持若依框架,可同时生成若依框架代码和所有业务表的前后端基础CRUD代码,一键搞定所有  2. ...

  5. 如何提高程序员人效?代码生成工具/框架

    image.png 最近事情太多,很久没有更新简书,突然想起如何提高程序员人效这个问题,就推荐一篇代码生成工具/框架的文章. http://www.cnblogs.com/skyme/archive/ ...

  6. 【高校宿舍管理系统】第一章 建立数据库以及项目框架搭建

    第一章 建立数据库以及项目框架搭建 提示:本博客个为人独立博客,不是权威,仅供参考!所有思路只做交流之用!如有不足之处,望各位在评论区友善指正. 文章目录 第一章 建立数据库以及项目框架搭建 前言 一 ...

  7. Web后端框架Springboot创建和基础讲解(一)

    Springboot是一款底层由java编写的web后端框架,前身是spring框架,相较于前身框架而言,继承了其良好的兼容性以及扩展性,并且舍弃了大量繁杂的xml文件,将其改为依赖注入spirngb ...

  8. apple id无法创建_我们如何使用Apple的学习框架来创建我们的第一个应用程序

    apple id无法创建 by Jonata Corrêa 由JonataCorrêa 我们如何使用Apple的学习框架来创建我们的第一个应用程序 (How we used Apple's learn ...

  9. (三) Angular2项目框架搭建心得

    前言: 在哪看到过angular程序员被React程序员鄙视,略显尴尬,确实Angular挺值得被调侃的,在1.*版本存在的几个性能问题,性能优化的"潜规则"贼多,以及从1.*到2 ...

最新文章

  1. [java多线程] - 锁机制同步代码块信号量
  2. 软件测试作业2:在敏捷宣言遵循的12条原则中挑选1条你感兴趣的原则进行风险评估
  3. 这才是2019年小程序的趋势,你该如何把握机会?
  4. 执行对象cocos2d-x 2.x action动作整理集合
  5. 16.2 调色板动画
  6. SQLServer Bulk insert 操作
  7. 苹果录屏没声音_苹果手机扬声器没声音是怎么回事?
  8. 微软网站打不开_分享几个国外超高清壁纸网站4k可任意下载
  9. 2003年新版CCNP考试大纲---CITV5.0(转)
  10. 从零开始山寨Caffe·伍:Protocol Buffer简易指南
  11. Github项目分享——Vue随机刷装备小游戏
  12. spring 演变_团队的演变
  13. 尚硅谷的后台管理系统学习笔记【尚硅谷】【Vue】
  14. 学海无涯!java流式计算性能
  15. 【移动安全高级篇】————5、Andorid APK反逆向解决方案---梆梆加固原理探寻
  16. php中如何创建一个对象的方法,如何创建一个对象的方法及原型对象了解一下
  17. 三星 j3 android 8.0,三星J3 Pro官方台湾版安卓8.0固件线刷包:BRI-J330GDXS3BSF5
  18. H.266/VVC的编码结构和块划分
  19. oracle视图无故消失,oracle数据库视图无效
  20. windows计划任务所遇到的闪退、触发器没有按时执行的坑

热门文章

  1. 出售视频聊天室源码 功能类似 YY 齐秀
  2. 【python爬虫专项(24)】协调Selenium与requests+bs的方法
  3. 2019年的最后一个月,这里有6种你必须要知道的最新剪枝技术
  4. WinMerge——好用的代码对比工具
  5. 华为云软件开发云VS开发痛点=?
  6. 微信论坛小程序系统设计与实现
  7. 详解机器学习中常见的距离与Python实现
  8. 华为虚拟机 获取不到ip_无线客户端获取不到ip地址
  9. Java 通过url 下载图片
  10. html表格开始的标记是什么,在html代码中表示表格行的标记是什么