`
YZZZFHLC201314
  • 浏览: 3243 次
社区版块
存档分类
最新评论

Eclipse插件开发 RCP生成jar包后获取jar包中的Plugin/Bundle文件资源——以FreeMarker为例

阅读更多

       在进行Eclipse插件开发时,有一种应用场景是,需要在插件项目中设置存放有例如配置文件、模板文件的资源文件夹。本文介绍的问题是,插件项目打包发布后,无法访问资源文件夹中的资源文件。

       问题重现:

       在插件项目的根目录下有模板资源文件夹,需要在插件运行时访问这些资源。在插件开发中,通过"Run as -- Eclipse Application"方式测试插件,可以正常访问,但是生成jar包后发布运行,却无法定位到这些资源文件(表现为,指向该资源文件的URL对象为 空)。

       问题代码(目的是插环件境中定位FreeMarker模板文件位置,本例中模板文件路径为Project_HOME(插件工程根目录)/resources/*.ftl):

 

cfg = new Configuration();
URL url = Activator.getDefault().getBundle().getResource("resources");
//log.info("resources url: " + url);  // 测试代码,其中log为private static Logger log = LoggerFactory.getLogger(FreeMarkerUtil.class);
//log.info("resources path: " + url.toString());
String resourcesPath = FileLocator.toFileURL(url).getPath();
File resourcesDir = new File(resourcesPath);
cfg.setDirectoryForTemplateLoading(resourcesDir);  // FreeMarker定位资源的方法随应用场景不同调用不同API,详见FreeMarker手册
Template template = cfg.getTemplate(templateName, "UTF-8");  // templateName为相对于resources路径,如templateName="a.ftl",则其路径为Project_HOME/resources/a.ftl

 

 

       问题原因解析:

       Eclipse API通过这些资源相对于Plugin/Bundle的路径,获取这些资源的绝对路径的方法。Eclipse API通过IBundle接口获取位于在Bundle文件目录中的资源,也就是说,必须将资源路径配置到Bundle的类加载路径中,才能保证 Bundle能够定位、访问这些资源。有关Eclipse API、Bundle等概念和插件资源等相关知识的深入内容,推荐阅读:http://blog.csdn.net/soszou/article/details/8034482

 

      本文问题解决方案:

      1)项目开发中的资源文件夹如图:

     
      插件Classpath配置如图:

      
以"Run as -- Eclipse Application"方式测试插件时可以正常访问,但打包发布后,运行时得到的资源URL如图:

       2)解决方法:打开MANIFEST.MF的编辑器,在"Runtime"编辑页,将资源文件夹(本文中为"resources")配置进入Classpath,如图:

        结果为:

         添加后,可以发现"resources"文件夹的图标发生改变,如图:

        打包发布后,运行时得到的资源URL如图:

        3)结论:

        必须将资源路径配置到Bundle的类加载路径中,才能保证Bundle能够定位、访问这些资源。其实可以通过插件加载icons目录下的图片文件的机制,联想到其他资源文件的加载。在Eclipse API中可以通过如下方式获取插件项目中的图片资源:

 

public static ImageDescriptor getImageDescriptor(String path) {
    return imageDescriptorFromPlugin(PLUGIN_ID, path);
}
        或

 

Image image = Activator.getImageDescriptor("icons/workset.gif").createImage();

        这是因为插件项目已经默认将icons配置进入了Classpath中,在"MANIFEST.MF"文件编辑器的"build.properties"页中可以发现,如图:

         按照本文中的解决方案操作之后,可以发现,resources文件夹也被添加到了bin.includes中了,如图:

    

       全文完。

  • 大小: 3.1 KB
  • 大小: 13 KB
  • 大小: 3.3 KB
  • 大小: 50.6 KB
  • 大小: 13.6 KB
  • 大小: 2.6 KB
  • 大小: 5.9 KB
  • 大小: 44.2 KB
  • 大小: 45.7 KB
分享到:
评论

相关推荐

    eclipse插件开发实战

    介绍了eclipse插件开发基本理论、插件项目结构及开发步骤,最后再给出两个插件开发实例。结构如下: 1.介绍eclipse内核结构、扩展点机制; 2.介绍SWT的原理,控件设计及事件响应机制 3.介绍OSGi 4.介绍RCP(Rich ...

    eclipse插件及RCP开发资料.rar

    eclipse插件及RCP开发资料.rar eclipse插件及RCP开发资料.rar eclipse插件及RCP开发资料.rar

    eclipse插件开发: rcp/swt相关资料

    eclipse插件开发: rcp/swt相关资料 rcp swt 插件开发

    eclipse插件开发 rcp入门开发详细讲解一

    eclipse 3.6 rcp 开发

    Eclipse RCP允许开发者使用eclipse结构风格设计弹性的可扩展的应用程序,可重用Eclipse中已存在的方法和编码模式。俗话说,万事开头难。Eclipse RCP入手可能会比较困难、费时。接下来我们将主要讲述如何让RCP工作. ...

    Eclipse RCP应用系统开发方法与实战jar包

    陈冈所著的Eclipse RCP应用系统开发方法与实战 源码中所需要的所有jar包。如果某位手上有完整的文本材料也请发我一份,谢谢

    Eclipse插件开发笔记—PDF—带目录

    1.1.2 为Eclipse IDE安装中文语言包 1.1.3 IDE的环境设置 1.1.4 使用帮助系统 1.2 什么是Eclipse 1.3 SWT/JFace技术 1.4 插件技术和OSGi 1.5 RCP技术 1.6 EMF技术 1.7 GEF技术 1.8 本章小结 第2章 SWT/JFace概述 第3...

    eclipse3.4 RCP插件开发英文教程

    eclipse3.4 RCP插件开发英文教程,转成了pdf

    Eclipse插件开发学习笔记 第三四篇(22-25).rar

    本书由浅入深、有重点、有针对性地介绍了Eclipse插件开发技术,全书分为4篇共24章。第一篇介绍Eclipse平台界面开发的基础知识,包括SWT控件的使用、界面布局、事件处理等内容;第二篇是插件开发核心技术,主要介绍...

    Eclipse插件开发学习笔记 第三四篇(26-28)+原代码.rar

    本书由浅入深、有重点、有针对性地介绍了Eclipse插件开发技术,全书分为4篇共24章。第一篇介绍Eclipse平台界面开发的基础知识,包括SWT控件的使用、界面布局、事件处理等内容;第二篇是插件开发核心技术,主要介绍...

    Eclipse RCP(富客户端平台)开发中文语言包_3.6.0.rar

    Eclipse富客户端平台RCP程序使用的中文语言包。用于开发Eclipse插件或RCP富客户端平台使用。

    Eclipse RCP开发教程

    Eclipse RCP开发教程,RCP入门教程,教你如何使用SWT Eclipse RCP开发教程,RCP入门教程,教你如何使用SWT Eclipse RCP开发教程,RCP入门教程,教你如何使用SWT Eclipse RCP开发教程,RCP入门教程,教你如何使用SWT

    eclipse 插件开发01

    第三篇主要讲述插件开发的高级内容,包括开发高级内容、富客户端平台技术(RCP)、Draw2d,以及GEF介绍与实现等4个章节;第四篇则围绕插件开发和GEF应用两个主题,精心设计了两个程序开发实例,使读者能更加全面地...

    Eclipse插件开发 学习笔记 第二篇 核心技术(11-16).rar

    本书由浅入深、有重点、有针对性地介绍了Eclipse插件开发技术,全书分为4篇共24章。第一篇介绍Eclipse平台界面开发的基础知识,包括SWT控件的使用、界面布局、事件处理等内容;第二篇是插件开发核心技术,主要介绍...

    第三方JAR包转换成插件依赖RCP工程

    在RCP工程中需要的应用jar,转换成插件,然后依赖到RCP工程中去,这样减小了插件包的大小。

    Eclipse插件开发笔记源码

    Eclipse插件开发笔记,书源码。经典eclipse插件开发案例,RCP开发案例

    Eclipse RCP 开发资料

    Eclipse RCP 开发资料打包下载 目录如下: RCP程序设计.pdf(推荐) Addison.Wesley.Eclipse.Rich.Client.Platform.Designing.Coding.and.Packaging.Java.Applications.Oct.2005.chm Eclipse+RCP入门.pdf example_...

    Eclipse插件开发 学习笔记 第一篇 开发基础(01-05).rar

    Eclipse插件开发 学习笔记 第一篇 开发基础(01-05).rar Eclipse插件开发 学习笔记 第一篇 开发基础(06-10).rar Eclipse插件开发 学习笔记 第二篇 核心技术(11-16).rar Eclipse插件开发 学习笔记 第二篇 核心技术(17-...

    Eclipse RCP开发详解

    eclipse rcp开发插件详解,快速开发eclipse插件,资源很好

    《Eclipse插件开发学习笔记》源码

    本书由浅入深、有重点、有针对性地介绍了Eclipse插件开发技术,全书分为4篇共24章。第一篇介绍Eclipse平台界面开发的基础知识,包括SWT控件的使用、界面布局、事件处理等内容;第二篇是插件开发核心技术,主要介绍...

Global site tag (gtag.js) - Google Analytics