`
xiaguangme
  • 浏览: 73029 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

如何获取Eclipse已经加载的插件

 
阅读更多

背景:

在Eclipse插件开发,自动化构建产品的过程中,当产品构建好之后,如何得知所build的插件都是build的成功且是被成功加载的。点击 Eclipse的/About Eclipse/Install Details/Plug-ins 然后能在这个页面所成功加载的插件.

 

 

 

但是要是开发规模仅是几个插件还是肉眼能区分的,如果插件个数很多就难弄了。遗憾的是这个页面不能导出 不能复制。只能肉眼看。当你开发的产品涉及自己开发的插件有上几百个的时候,就比较麻烦了。

 

解决办法

修改其源码,将这些插件名字写进文件。

如何修改

经搜索发现这个About页面是在org.eclipse.ui.workbench插件中实现的

找到相应的java类,做适当修改,重新编译,替换jar包中的class,以clean方式启,便能实现。

我们开发的产品对应 Eclipse 3.5.2

对应其源码在http://archive.eclipse.org/eclipse/downloads/drops/R-3.5.2-201002111343/eclipse-SDK-3.5.2-win32.zip

org.eclipse.ui.workbench插件 版本是 org.eclipse.ui.workbench_3.5.2.M20100113-0800.jar

其对应的源码包是org.eclipse.ui.workbench.source_3.5.2.M20100113-0800.jar

解压这个源码包导入进Eclipse

将org.eclipse.ui.workbench_3.5.2.M20100113-0800.jar中的plugin.xml文件放至工程中,将META-INF\MANIFEST.MF这个文件替换工程中相应文件

这样这个工程依赖其他插件的配置就ok了。如下图:

 

找到org.eclipse.ui.internal.about.AboutPluginsPage这个类

在 createControl(Composite parent) 方法中略作修改

将bundleInfos中获得的插件名称写入至log文件

修改如下

 

 

public void createControl(Composite parent) {
         initializeDialogUnits(parent);
 
         // create a data object for each bundle, remove duplicates, and include
         // only resolved bundles (bug 65548)
         Map map = new HashMap();
         for (int i = 0; i < bundles.length; ++i) {
             AboutBundleData data = new AboutBundleData(bundles[i]);
             if (BundleUtility.isReady(data.getState())
                     && !map.containsKey(data.getVersionedId())) {
                 map.put(data.getVersionedId(), data);
             }
         }
         bundleInfos = (AboutBundleData[]) map.values().toArray(
                 new AboutBundleData[0]);
         
         /**
          * 将Eclipse已经加载所有插件名称排序后写入log文件
          * 以方便ci集成后check
          */
         List<String> allPluginsName = new ArrayList<String>(bundleInfos.length);
         for(AboutBundleData aboutBundleInfo : bundleInfos) {
             allPluginsName.add(aboutBundleInfo.getBundle().getSymbolicName());
         }
         Collections.sort(allPluginsName);
         
         StringBuilder sb = new StringBuilder();
         for(String tempPluginName : allPluginsName) {
             sb.append(tempPluginName);
             sb.append("\n");
         }
         String eclipseInsPath = Platform.getInstallLocation().getURL().getPath();
         String allPluginsNameLogFilePath = eclipseInsPath + "/allPlugins.log";
         File allPluginsNameLogFile = new File(allPluginsNameLogFilePath);
         try {
             if(allPluginsNameLogFile.exists()) {
                 allPluginsNameLogFile.delete();
             }
             Writer fWriter = new FileWriter(allPluginsNameLogFile);
             BufferedWriter bfWriter = new BufferedWriter(fWriter);
             bfWriter.write(sb.toString());
             bfWriter.flush();
             bfWriter.close();
             fWriter.close();
         } catch (IOException e) {
             e.printStackTrace();
         }
         
         
         WorkbenchPlugin.class.getSigners();
 
         sashForm = new SashForm(parent, SWT.HORIZONTAL | SWT.SMOOTH);
         FillLayout layout = new FillLayout();
         sashForm.setLayout(layout);
         layout.marginHeight = 0;
         layout.marginWidth = 0;
         GridData data = new GridData(GridData.FILL_BOTH);
         sashForm.setLayoutData(data);
 
         Composite outer = createOuterComposite(sashForm);
         PlatformUI.getWorkbench().getHelpSystem().setHelp(outer, helpContextId);
 
         if (message != null) {
             Label label = new Label(outer, SWT.NONE);
             label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
             label.setFont(parent.getFont());
             label.setText(message);
         }
 
         createTable(outer);
         setControl(outer);
     }
 

 

 

代码修改好后,clean 工程使其重新编译,到bin\org\eclipse\ui\internal\about 找到AboutPluginsPage几个class(含其内部类编译出来的class)

关闭eclipse

替换掉org.eclipse.ui.workbench_3.5.2.M20100113-0800.jar包中相应的class文件(附件中是改好的)

eclipse -clean 方式启动eclipse 即可。

 

--EOF--

分享到:
评论

相关推荐

    eclipse背景主题插件

    这个目录是Eclipse识别并自动加载插件的地方。完成此步骤后,重新启动Eclipse,插件就会被自动加载并生效。 3. **自定义编码风格** 这款主题插件不仅改变Eclipse的背景颜色,还可能包括对代码高亮、行号显示、括号...

    Eclipse BPMN2.0插件(离线安装)

    当Eclipse加载完毕,插件应该已经被自动识别和安装。 7. **验证安装**:在Eclipse中,点击"Window" -&gt; "Show View" -&gt; "Other...",在弹出的窗口中搜索"BPMN2",你应该能看到BPMN2相关的视图和编辑器。选择并打开...

    eclipse-SVN插件

    Eclipse SVN插件是开发人员在使用Eclipse IDE时用于版本控制的重要工具,它与Subversion(SVN)系统紧密集成,使得代码的版本管理和协同工作变得更加便捷。Subversion是一种开源的版本控制系统,用于跟踪文件和目录...

    eclipse的weblogic插件

    你可以在Eclipse的"Window"菜单中找到"Preferences"或"首选项",然后在展开的树形结构中看到"WebLogic"相关的配置选项,这表明WebLogic插件已经成功安装。 WebLogic插件提供了一系列的功能,主要包括: 1. **...

    eclipse svn1.8插件

    这个目录是Eclipse识别并自动加载插件的地方。 - 重启Eclipse:完成放置后,重启Eclipse,插件会自动安装并生效。 2. **主要功能**: - **版本控制**:通过SVN插件,开发者可以轻松地对项目进行版本控制,包括...

    eclipse安装Hadoop插件

    3. **查看DFS Locations**:在Eclipse的项目管理器中,应能看到名为“DFS Locations”的新视图出现,这表示插件已经成功安装。 #### 五、设置Hadoop集群位置 1. **配置环境**:通过Eclipse的菜单栏进行设置,依次...

    自定义eclipse插件

    Eclipse是一款广泛使用的开源集成开发环境(IDE),它支持多种编程语言,如Java、C++、Python等。...在实际开发过程中,你可能还需要了解Eclipse的API文档,查阅相关教程,以及加入社区讨论,以获取更多帮助和支持。

    eclipse svn1.8插件下载

    而`plugins`目录则包含了实际的插件实现,它们是Eclipse运行时加载的二进制代码。 安装过程通常涉及以下步骤: 1. 下载完成后,解压下载的压缩包,确保有`features`和`plugins`两个目录。 2. 启动Eclipse,进入...

    Eclipse3.3 svn插件

    "plugins"目录通常包含实际的插件JAR文件,这些文件会被Eclipse加载以提供特定的功能。而"features"目录则包含Eclipse特征(Feature)的描述,特征是一组相关插件的集合,可以作为一个整体安装。 安装Eclipse3.3的...

    JAVA热加载eclipse插件

    - 确保JRebel或其他热加载插件的许可证有效,以避免使用限制。 7. **总结** Java热加载Eclipse插件极大地提高了开发效率,减少了因频繁重启服务器而浪费的时间。正确选择和配置合适的插件,可以更好地利用这项...

    eclipse打包jar插件

    此时,可以通过在启动Eclipse时添加`-clean`参数来清除缓存,强制Eclipse重新加载所有插件,这通常能解决大部分插件加载问题。 在实际开发中,一个常见的打包插件是`Export Wizard`,它是Eclipse自带的一个功能,...

    eclipse启动时间插件

    如果放入`dropins`目录,Eclipse会自动识别并加载插件。在放置完成后,重启Eclipse,新插件就会生效,启动时间应该会有所改善。 需要注意的是,虽然这个插件声称“亲测可用”,但每个用户的环境都有所不同,因此在...

    eclipse svn插件

    "dropins"目录是Eclipse用来自动加载插件的地方,放置在这里的插件会在Eclipse启动时自动被识别并安装。 接着,重启Eclipse,这是为了让Eclipse识别并加载新放入的插件。重启完成后,你可以通过检查“Window”菜单...

    eclipse用vm插件

    7. 重新启动Eclipse,新的插件应该已经被识别并加载。 【使用Velocity插件】 安装完成后,Eclipse会提供对Velocity模板的语法高亮、自动完成、错误检查等功能。你可以在Eclipse中创建和编辑`.vm`文件,这些文件...

    eclipse的tomcat插件

    确保Eclipse已经关闭,然后重新启动Eclipse,插件应该已经被自动安装并显示在服务器视图中。 接下来,进行Tomcat服务器的配置。首先,你需要在Eclipse中创建一个新的服务器实例。这可以通过依次点击菜单栏的"Window...

    eclipse 离线添加Genymotion插件

    这意味着插件已经成功安装。 7. 现在你可以配置插件设置,如Genymotion的安装路径、SDK路径等,然后就可以在Eclipse中愉快地使用Genymotion模拟器了。 请注意,离线安装的插件版本可能不是最新的,因此可能无法...

    eclipse的svn插件

    将插件文件夹放进去后,Eclipse在启动时会自动检测并加载这些插件。重启Eclipse后,新的SVN功能就会生效。 具体步骤如下: 1. 下载适用于Eclipse的SVN插件,常见的有Subversive或Subclipse。 2. 解压缩下载的插件...

    eclipse支持lomboz插件

    如果你使用的是Eclipse的"dropins"机制,可以直接将文件放置在该目录下,Eclipse会自动识别并加载插件。 4. **启动Eclipse**:关闭正在运行的Eclipse,然后重新启动。Eclipse会检测到新添加的插件,并在下次启动时...

    eclipse插件IE插件

    接着,如果插件有更新站点,可以输入URL加载插件列表;如果没有,可以选择"Add",然后"Archive..."导入ZIP文件;最后,按照向导完成安装并重启Eclipse。 总之,Eclipse插件和IE插件在Web开发中扮演着重要角色,通过...

    eclipse启动加速插件

    总的来说,Eclipse启动加速插件是提升开发效率的重要工具,它们通过内存管理优化和减少启动时加载的组件来缩短启动时间。正确配置和使用这些插件,可以让Eclipse在处理大型项目或多任务环境时更加得心应手,从而提高...

Global site tag (gtag.js) - Google Analytics