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

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插件开发 rcp入门开发详细讲解一

    ### Eclipse RCP插件开发详解 #### 一、Eclipse RCP概述 Eclipse RCP (Rich Client Platform) 是一种基于Java技术构建的框架,用于开发功能丰富的桌面应用程序。它利用了Eclipse平台的核心组件,如工作台...

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

    这个"3.6.0"版本的Eclipse RCP中文语言包是专为那些需要在中文环境下开发Eclipse插件或RCP应用的开发者准备的。 1. **Eclipse RCP介绍** Eclipse RCP的核心理念是模块化和组件化,这使得开发者可以重用已有的功能...

    eclipse插件及RCP开发资料.rar

    5. **插件部署**:开发完成后,插件通常被打包成一个.jar文件或.update站点,用户可以通过Eclipse的"Install New Software"功能进行安装。 二、Eclipse RCP开发 1. **RCP概念**:RCP是Eclipse提供的一种客户端应用...

    Eclipse RCP 插件开发指南

    ### Eclipse RCP 插件开发指南 #### Eclipse RCP Plugin 开发快速入门 Eclipse RCP(Rich Client Platform)插件开发是构建基于Eclipse框架的应用程序的核心技术之一。本指南旨在帮助开发者从零开始掌握Eclipse ...

    Eclipse RCP 软件打包发布方法

    Eclipse Rich Client Platform (RCP) 是一个强大的框架,用于构建桌面应用程序。它提供了一整套工具和功能,使得开发者可以构建出具有丰富用户界面的应用。在开发完成后,我们需要将这些应用打包并发布,以便用户...

    安装freemarker插件(freemarker的eclipse插件)

    c) 发现hudson.freemarker_ide_0.9.14下的freemarker-2.3.6.jar包是比较早的版本,用新的freemarker-2.3.19.jar替换之,把MANIFEST.MF里的Bundle-ClassPath也改为freemarker-2.3.19.jar d) 打开eclipse\...

    Eclipse插件开发学习笔记全篇+源码.rar

    4. 社区资源和最佳实践:熟悉Eclipse社区,了解最新的插件开发技术和社区最佳实践。 5. 持续集成和部署:设置CI/CD流程,确保插件的质量和快速迭代。 提供的源码将帮助你更好地理解书中的示例,通过实际操作加深对...

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

    以`pinyin4j-2.5.0.jar`为例,这是一款非常实用的拼音处理工具包。 **步骤二:创建新的插件项目** 1. 在Eclipse中,选择【File】→【New】→【Project】。 2. 在“New Project”对话框中,选择“Plug-in from ...

    Eclipse插件开发文档

    要开始Eclipse插件开发,首先需要安装Eclipse IDE for RCP and RAP Developers,这是一个专门用于RCP(Rich Client Platform)和插件开发的版本。然后,可以使用Eclipse内置的Plug-in Development Environment (PDE)...

    Eclipse 插件开发 简易教程

    1. 活动(Bundle):Eclipse中的基本单元,对应于Java的JAR文件,包含了插件的代码和资源。 2. 服务(Service):允许插件之间通信和共享功能,通过OSGi服务注册表进行查找和获取。 3. 构成(Configuration):定义...

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

    在提供的jar包中,我们可以找到一系列支持Eclipse RCP开发的关键库文件。"lib"目录下的文件通常包含了运行和构建Eclipse RCP应用程序所需的依赖。这些jar包可以分为几个关键类别: 1. **Eclipse核心库**:这些jar包...

    eclipse RCP Plug-in开发自学教程.pdf

    eclipse RCP(Rich Client Platform)是一种基于eclipse的插件式开发平台,允许开发者使用eclipse结构风格设计弹性的可扩展的应用程序。RCP插件式开发方式可以重用eclipse中的方法和编码模式,提高开发效率和代码...

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

    Eclipse插件开发是Java开发领域中的一个重要组成部分,它允许开发者构建基于Eclipse平台的应用程序,扩大Eclipse的功能。RCP(Rich Client Platform)和SWT(Standard Widget Toolkit)是Eclipse插件开发中的核心...

    Eclipse插件开发系列

    1. **开发环境准备**:包括安装Eclipse IDE for RCP and RAP Developers,这是一个专门用于开发Eclipse插件的版本,它包含了开发插件所需的工具和API。 2. **插件项目创建**:在Eclipse中,我们可以通过"New -> ...

    Eclipse4-RCP 开发教程

    7. **打包与部署**:学习如何打包Eclipse RCP应用程序,以及创建可启动的JAR或EXE文件。 通过本教程的学习,开发者不仅能掌握Eclipse 4 RCP的基本概念和技术,还能获得实际动手开发Eclipse RCP应用程序的经验。对于...

    Eclipse插件开发笔记源码

    Eclipse插件开发是Java开发领域中的一个重要分支,它允许开发者通过扩展Eclipse IDE的功能来创建自定义的工作环境。这份“Eclipse插件开发笔记源码”提供了丰富的学习材料,帮助开发者深入理解并实践Eclipse插件开发...

    eclipse插件开发实战

    ### Eclipse 插件开发实战详解 #### 一、Eclipse 内核结构与扩展点机制 **1. Eclipse 内核结构概述** Eclipse 的核心是插件加载器,整个平台由众多插件组成,其架构特点在于轻量级的核心与高度可扩展的设计。在...

    Eclipse RCP中使用第三方包

    在添加jar文件到classpath中后,我们需要在plugin的Runtime页面中配置classpath。在这个页面中,我们需要将我们的输出目录和jar文件所在的目录添加到classpath中。这样,在编译和运行RCP应用程序时,会包含第三方库...

    eclipse插件开发_第三版

    根据给定的文件信息,标题为“eclipse插件开发_第三版”,描述为英文版,但实际内容并未提供。在这种情况下,我将基于“eclipse插件开发”这一主题,详细阐述eclipse插件开发的相关知识点。 ### Eclipse插件开发...

Global site tag (gtag.js) - Google Analytics