- 浏览: 28317 次
- 性别:
- 来自: 广州
文章分类
最新评论
在第二步中需要有个PluginClassCodeGenerator类,是用来生产插件工程的启动类Activator,在eclipse源码中,也需要依赖向导中保存的一些上下文信息,也需要进行改造,改造后如下。
经过这三步,能生产最基础的插件工程,用处其实不大,需要进一步的定制特别的插件工程内容来满足需求。
import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.util.ArrayList; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.pde.core.plugin.IPluginReference; import org.eclipse.pde.internal.build.IPDEBuildConstants; import org.eclipse.pde.internal.core.util.CoreUtility; import org.eclipse.pde.ui.templates.PluginReference; /** * * @author aquarion * @version 1.0 * */ @SuppressWarnings("restriction") public class PluginClassCodeGenerator { private IProject fProject; private String fQualifiedClassName; private String id; public PluginClassCodeGenerator(IProject project, String qualifiedClassName, String id) { fProject = project; fQualifiedClassName = qualifiedClassName; this.id = id; } public IFile generate() throws CoreException { int nameloc = fQualifiedClassName.lastIndexOf('.'); String packageName = (nameloc == -1) ? "" : fQualifiedClassName.substring(0, nameloc); //$NON-NLS-1$ String className = fQualifiedClassName.substring(nameloc + 1); IPath path = new Path(packageName.replace('.', '/')); path = new Path("src").append(path); CoreUtility.createFolder(fProject.getFolder(path)); IFile file = fProject.getFile(path.append(className + ".java")); //$NON-NLS-1$ StringWriter swriter = new StringWriter(); PrintWriter writer = new PrintWriter(swriter); // only generate/extend plug-in classes if it's a IU plug-in generatePluginClass(packageName, className, writer); writer.flush(); try { swriter.close(); ByteArrayInputStream stream = new ByteArrayInputStream(swriter .toString().getBytes(fProject.getDefaultCharset())); if (file.exists()) file.setContents(stream, false, true, null); else file.create(stream, false, null); stream.close(); } catch (IOException e) { } return file; } private void generatePluginClass(String packageName, String className, PrintWriter writer) { if (!packageName.equals("")) { //$NON-NLS-1$ writer.println("package " + packageName + ";"); //$NON-NLS-1$ //$NON-NLS-2$ writer.println(); } writer.println("import org.eclipse.ui.plugin.AbstractUIPlugin;"); //$NON-NLS-1$ writer.println("import org.osgi.framework.BundleContext;"); //$NON-NLS-1$ writer.println(); writer.println("/**"); //$NON-NLS-1$ writer.println(" * The activator class controls the plug-in life cycle"); //$NON-NLS-1$ writer.println(" */"); //$NON-NLS-1$ writer.println("public class " + className + " extends AbstractUIPlugin {"); //$NON-NLS-1$ //$NON-NLS-2$ writer.println(); writer.println("\t// The plug-in ID"); //$NON-NLS-1$ writer.println("\tpublic static final String PLUGIN_ID = \"" + id + "\"; //$NON-NLS-1$"); //$NON-NLS-1$ //$NON-NLS-2$ writer.println(); writer.println("\t// The shared instance"); //$NON-NLS-1$ writer.println("\tprivate static " + className + " plugin;"); //$NON-NLS-1$ //$NON-NLS-2$ writer.println("\t"); //$NON-NLS-1$ writer.println("\t/**"); //$NON-NLS-1$ writer.println("\t * The constructor"); //$NON-NLS-1$ writer.println("\t */"); //$NON-NLS-1$ writer.println("\tpublic " + className + "() {"); //$NON-NLS-1$ //$NON-NLS-2$ writer.println("\t}"); //$NON-NLS-1$ writer.println(); writer.println("\t/*"); //$NON-NLS-1$ writer.println("\t * (non-Javadoc)"); //$NON-NLS-1$ writer.println("\t * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)"); //$NON-NLS-1$ writer.println("\t */"); //$NON-NLS-1$ writer.println("\tpublic void start(BundleContext context) throws Exception {"); //$NON-NLS-1$ writer.println("\t\tsuper.start(context);"); //$NON-NLS-1$ writer.println("\t\tplugin = this;"); //$NON-NLS-1$ writer.println("\t}"); //$NON-NLS-1$ writer.println(); writer.println("\t/*"); //$NON-NLS-1$ writer.println("\t * (non-Javadoc)"); //$NON-NLS-1$ writer.println("\t * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)"); //$NON-NLS-1$ writer.println("\t */"); //$NON-NLS-1$ writer.println("\tpublic void stop(BundleContext context) throws Exception {"); //$NON-NLS-1$ writer.println("\t\tplugin = null;"); //$NON-NLS-1$ writer.println("\t\tsuper.stop(context);"); //$NON-NLS-1$ writer.println("\t}"); //$NON-NLS-1$ writer.println(); writer.println("\t/**"); //$NON-NLS-1$ writer.println("\t * Returns the shared instance"); //$NON-NLS-1$ writer.println("\t *"); //$NON-NLS-1$ writer.println("\t * @return the shared instance"); //$NON-NLS-1$ writer.println("\t */"); //$NON-NLS-1$ writer.println("\tpublic static " + className + " getDefault() {"); //$NON-NLS-1$ //$NON-NLS-2$ writer.println("\t\treturn plugin;"); //$NON-NLS-1$ writer.println("\t}"); //$NON-NLS-1$ writer.println(); writer.println("}"); //$NON-NLS-1$ } @SuppressWarnings({ "rawtypes", "unchecked", "restriction" }) public IPluginReference[] getDependencies() { ArrayList result = new ArrayList(); result.add(new PluginReference("org.eclipse.ui", null, 0)); //$NON-NLS-1$ result.add(new PluginReference(IPDEBuildConstants.BUNDLE_CORE_RUNTIME, null, 0)); return (IPluginReference[]) result.toArray(new IPluginReference[result .size()]); } // public String[] getImportPackages() { // return fPluginData.getOSGiFramework() != null ? new String[] { "org.osgi.framework;version=\"1.3.0\"" } //$NON-NLS-1$ // : new String[0]; // } }
经过这三步,能生产最基础的插件工程,用处其实不大,需要进一步的定制特别的插件工程内容来满足需求。
发表评论
-
GEF简介与事件机制
2014-08-07 09:56 3589一、GEF简介 GEF(Graphica ... -
GEF入门参考
2014-08-07 09:37 609一些网站 http://www.ibm.com/develo ... -
SWT-GEF事件转义相关类
2014-08-07 09:35 836在Draw2d中,Lightweight是gef图形系统的”s ... -
GEF中Editor创建的时序图
2014-08-07 09:33 577以eclipse网站上例子A Shape Diagram Ed ... -
org.eclipse.core.resources.builders扩展点-转载
2013-10-12 14:28 2406org.eclipse.core.resources. ... -
org.eclipse.ui.decorators 使用(转)
2013-10-12 14:24 640org.eclipse.ui.decorators这个扩展点可 ... -
org.eclipse.ui.menus扩展点
2013-06-06 11:17 1876eclipse插件开发中 ... -
Eclipse开发中的 NoClassDefFoundError
2013-03-26 16:18 1202在eclipse插件开发过程中,需要引入很多的第三方j ... -
Eclipse事件与通讯
2013-01-18 15:58 968在开发Eclipse插件开发rcp过程中需要用到很多的 ... -
使用代码生成插件工程,脱离eclipse本身的新建工程向导(2)
2012-11-22 10:52 3742在第一步完成后,我从pde的向导代码入手看eclips ... -
使用代码生成插件工程,脱离eclipse本身的新建工程向导(1)
2012-11-22 10:43 1770第一步,新建一个普通的Java工程。在网上,我找到了网 ... -
插件开发基础类(转载)
2012-09-25 16:36 7741..IWorkbench: workbench是e ... -
获取需要平台的信息
2012-09-25 16:16 764开发rcp程序的时候,需要获取许多平台和编辑器的相关信 ...
相关推荐
在本节中,我们探讨了Eclipse代码生成器插件开发的相关知识点,包括插件开发基本概念、Wizard向导制作、plugin.xml文件、Wizard类、新建项目向导和自定义Wizard页面等。这些知识点对于开发Eclipse插件非常重要,了解...
Java工程脱离Eclipse运行是指将Java工程从Eclipse中独立出来,生成一个可以独立运行的JAR包。下面是实现这一过程的详细步骤: 1. 选择要导出的项目,右键点击选择“导出” 2. 在弹出的框中选中“jar 文件” 3. 选择...
在Eclipse中,安装和使用代码行数统计插件非常简单。首先,用户需要打开"Windows"菜单,然后选择"Show View",接着在弹出的子菜单中找到"Other"选项。在"Other"对话框中,你可以搜索与代码统计相关的插件,比如"PMD...
Eclipse是广受欢迎的Java集成开发环境,而`mybatis-generator eclipse自动生成代码插件离线安装包`则是为了让开发者在没有网络连接的情况下也能在Eclipse中安装并使用MBG。 安装MBG插件的过程分为以下几个步骤: 1...
使用Eclipse插件进行代码行数统计通常有以下步骤: 1. 安装插件:首先,你需要将这个名为"LineCount"的压缩包导入到Eclipse中。这可以通过Eclipse的“Help”菜单 -> "Install New Software" -> "Add"来完成,然后...
通过学习这个插件的源码,开发者不仅可以提高自己的编程效率,还能深入理解Android插件开发,包括Eclipse插件API的使用、XML解析、代码生成等技术。这对于提升个人技能和理解Android生态系统的底层机制有着积极的...
MyBatis Generator(MBG)是一款强大的Eclipse插件,专为简化数据库操作而设计,它能够自动根据数据库表结构生成Java实体类、Mapper接口及XML配置文件等,极大地提升了开发效率。在Java Web开发中,MyBatis ...
eclipse插件生成ssh框架和ssi框架
标题中的"eclipse的mybatis逆向工程生成插件"指的是将Mybatis Generator集成到Eclipse中,以方便开发者快速生成基于数据库表结构的Java代码。逆向工程通常是指从现有数据库结构出发,自动生成与之对应的源代码,使得...
2. 找到并选择适合的UML反向工程插件,如“GenMyModel”、“Eclipse UML2 Tools”等。 3. 按照提示进行安装,可能需要重启Eclipse以使插件生效。 4. 安装完成后,可以在Eclipse的“Package Explorer”或“Project ...
它极大地简化了基于MyBatis框架的数据访问层(DAO)代码编写工作,通过数据库表反向工程实现代码自动化生成。这款插件适用于集成到Eclipse或MyEclipse环境中,帮助开发者快速构建项目。 首先,让我们深入了解一下...
单独jar包,myBatis代码生成eclipse插件,拷贝到eclipse的dropins文件夹
基于Eclipse的RCP插件开发,集成MyBatis的插件代码生成功能,另外使用Freemarker来生成代码,插件绝对原创,目前市面上没有.本人还没公开发布.所以好不好使用了才知道,10分不高.后续会发布的github上.并提供源代码.谢谢...
《基于Eclipse插件的简易代码生成工具》是一篇毕业设计论文,主要探讨了如何利用Eclipse平台开发一款能够自动生成代码的插件。在软件开发过程中,编码工作占据了大量时间,尤其对于重复性高的代码段,手动编写既耗时...
mybatis-eclipse插件及生成代码说明 包含mybatis-eclipse插件、插件的安装说明以及通过一个简单的实例描述如何在eclipse中使用mybatis-eclipse插件自动生成Mybatis相关的model、dao、Mapping等文件。 详见:...
【Eclipse插件内幕-插件开发-如何定制一个向导】 在Eclipse插件开发中,定制向导是创建用户友好且高效的工作流程的关键步骤。向导是一种引导用户逐步完成复杂任务的交互式界面,它能够简化和规范化数据输入过程。在...
写android 程序时,经常会使用findViewById方法、实现Parcelable接口,这些代码重复而又繁琐,所以抽空写了一个eclipse插件来生成这些代码。
eclipse插件,用于mysql数据库表到springmvc项目代码生成,生成代码包括model,dao,service,以及相关配置文件。