RCP开发

 

环境准备:

1. 安装JDK及JWS。在安装JDK时会自动安装Java Web Start,当然,也可以单独对JWS进行安装。一般不需要另行安装。

2. 对于RCP Examples应用的工程文件,也可以使用其它的RCP应用,只需改变JNLP的相应配置项即可。

3. Eclipse开发环境,Eclipse3.2。

(1)基于plugins的配置方式

以我们当前的项目配置为例(下面是当前的工程):

创建JNLP功能部件

首先,为了方便的导出基于WebStart的RCP应用,我们需要创建一个包含RCP应用中所有插件的外围功能部件(即对应的feature工程),用来对RCP应用进行打包。这个功能部件也会包含RCP的启动类org.eclipse.core.launcher.WebStartMain所在的startup.jar文件,以便在打包时一起发布。

启动Eclipse,打开菜单File->New->Project, 选中 Feature Project 并且键入工程名称,比如 cn.bestwiz.jhf.dealer.demo.jnlp。直接点击Finish使用默认设置结束工程的创建。

在插件清单编辑器中,切换到Plug-ins页,添加所包含的功能部件cn.bestwiz.jhf.dealer.demo。

在功能部件清单编辑器中,切换到Included Features页,添加rcp程序所需要的功能部件org.eclipse.rcp。(网上资料一般都没有写,但这却是最关键的)

在打包时,要保持原来RCP应用的目录结构,即根目录下有plugins和features(可无)子目录,并且使用一个可执行文件(比如eclipse.exe)去调用startup.jar。对于使用WebStart来启

动的RCP应用来说,由WebStart代替了原来的可执行文件,并使用JNLP配置文件代替原来的eclipse.ini及config.ini。为了将startup.jar打包到根目录,我们在此功能部件目录下创建一个子目录。

选中功能部件cn.bestwiz.jhf.dealer.demo.jnlp,点击右键弹出菜单New->Folder,输入目录名,比如rootfiles,点击Finish。

切换到资源管理器,将当前Eclipse工具的安装目录下的startup.jar文件拷贝到此根目录下。接下来需要修改此功能部件的build.properties文件如下:

root = rootfiles

这就告诉PDE的打包工具,所有rootfiles目录下的文件都会打包到指定打包目录的根目录下。

创建KeyStore

Java Web Start的安全机制要求所有的Jar文件必须进行数字签名,才能有对本地文件系统或网络资源进行访问的权限。对于使用JWS启动的应用程序来说,是运行在一个有限制的环境中的,称为沙箱。通过对Jar文件进行数字签名,可以赋予此沙箱以更多的访问各种资源的能力。具体的安全机制请参考JWS相关文献。

为了对Jar文件进行数字签名,我们需要先创建一个KeyStore文件,这可以使用JDK或JRE自带的keytool工具来完成(确保环境变量Path中包JDK或JRE的Bin目录):

keytool -genkey -alias examples(密钥名,任意取名) -keypass 12345678(密钥密码,任意取名) -storepass (密钥密码对,与上一密码密码一致) -keystore .mykeystore(生成密钥文件名,任意取名)

 

接下来,将所生成的.mykeystore文件拷贝到一个目录,在打包过程中会使用此文件对所有的插件Jar包进行数字签名。

为项目cn.bestwiz.jhf.dealer.demo创建product

将生成的product文件更改为:the project configration is based on : features

将生成的product文件的configration清单编辑器中加入cn.bestwiz.jhf.dealer.demo.jnlp

 

 

打包并进行数字签名

首先,准备一个目录,比如D:/temp/examples,作为打包目录,同时也是放置主JNLP文件的目录。

在Eclipse中,打开菜单File->Export,选中Plug-in Development下的Deployable features,点击Next。在可用功能部件列表中,将cn.bestwiz.jhf.dealer.demo.jnlp选中。

在Destination页,输入或浏览选定所准备的打包目录

 

 

 

在Options页,选中"Package as individual JAR archives…":

 

 

 

在JAR Signing页,输入或浏览选定放置KeyStore的目录,所使用的别名及密钥库的库密码(在创建.mykeystore时指定):

 

这里需要确认Eclipse开发环境是基于JDK的,而不是基于JRE,因为打包工具会调用JDK Bin目录下的Jarsigner程序对所有RCP应用所包含的Plugin Jar文件进行数字签名。

在Java Web Start页,选中"Create JNLP manifests for the JAR archives"并指定所创建的JNLP文件所使用的CodeBase(这里我们使用本地文件系统以方便测试,正式发布时一般是

用一个WEB站点的URL:如tomcat服务器下面的某路径)及JRE版本:

 

最后一步,使用相同的密钥库及库密码,还需要对startup.jar文件进行数字签名:

jarsigner -keystore .mykeystore(密钥文件) startup.jar examples(密钥名)

 

创建主JNLP文件

主JNLP文件是启动应用程序的入口,在此文件中会指定所要运行的主类及需要下载的Jar包文件。

创建一个JNLP配置文件RcpDemo.jnlp:

<?xml version="1.0" encoding="UTF-8"?>

<jnlp spec="1.0+" codebase="file://d:/temp/examples" href="RcpDemo.jnlp"> <!--指定发布站点的URL,这里我们使用本地文件系统-->

<information> <!-- 下面是有关此应用程序的一些基本信息 -->

<title>rcp demo</title>

<vendor>wangshaochuan</vendor>

<homepage href="http://www.eclipse.org"/>

<description kind="short">RCP Demo Application</description>

<icon kind="splash" href="splash.gif"/> <!--Web Start应用程序的启动图标-->

<offline-allowed/>

</information>

<security>

<all-permissions/>

</security>

<application-desc main-class="org.eclipse.core.launcher.WebStartMain"> <!-- 设置此应用程序的启动类,RCP应用总是由此类来引导启动 -->

<argument>-nosplash</argument> <!-- 这里可以设置应用程序启动时所要传递的参数,与eclipse.exe所使用的参数类似 -->

</application-desc>

<resources>

<j2se version="1.5+" />

<jar href="startup.jar"/> <!-- 指定启动类所在的Jar包,发布RCP应用时总是要下载此Jar包 -->

<extension name="Rcp Demo Feature" href="features/cn.bestwiz.jhf.dealer.demo.jnlp_1.0.0.jnlp"/> <!-- 这里设置扩展配置文件的地址,对于JWS管理器来说,一个扩展配置文件即对应一个库,主应用程序可以使用多个库来完成<property name="osgi.configuration.area" value="@user.home/RcpDemo/configuration"/> <!-- 这里设置RCP应用程序的工作空间目录,与普通RCP应用中config.ini的配置项类似 -->

<property name="osgi.instance.area" value="@user.home/RcpDemo/workspace"/>

<property name="eclipse.product" value="cn.bestwiz.jhf.dealer.demo.product"/> <!-- 设置RCP应用启动时所要运行的产品Id,与config.ini中的配置相同 -->

</resources>

</jnlp>

最后,将主配置文件也放在JNLP功能部件的rootfiles目录下,在打包时即可一块打到发布站点上。

打包后的文件结构:

 

要使用JWS运行此RCP应用,可以在资源管理器中将JNLP文件类型与应用程序Java Web Start Launch相关联,双击即可运行。或者创建一个WEB页面文件,如:

<html>

<a href="file:/d:/temp/examples/RcpDemo.jnlp">RCP Demo</a>

</html>

注:如果要是更新其中的jar包,只要替换掉以前的原始jar包就可以,Web Start会自动跟据更新时间来下载更新的所更新的程序

   

       如上的操作可能会出现加载错误的问题,主要原因是导出时:

site URL: file:/d:/temp/examples  d的盘符冒号会丢失,个人解决采用jsp来动态拼装JLNP这个文件,该文件本质就是一个xml文件。选择这样的解决方法,步骤如下:

1.       将site URL修改成:

 

2.       jsp代码如下tutorial.jsp:

<%@ page contentType="application/x-java-jnlp-file" %>

<%

    StringBuffer codeBase = new StringBuffer();

    codeBase.append(request.getScheme()).append("://").append(request.getServerName());

    if (request.getServerPort() != (request.isSecure() ? 443 : 80))

        codeBase.append(':').append(request.getServerPort());

    codeBase.append(request.getContextPath()).append('/');

%>

<?xml version="1.0" encoding="UTF-8"?>

<jnlp

  spec="1.0+"

  codebase="<%= codeBase %>"

  href="<%= request.getRequestURL() %>">

  <information>

    <title>RCP Demo</title>

    <vendor>Lianjianhua</vendor>

    <description>RCP</description>

    <icon href="icon.jpeg"/>

  </information>

  <security>

    <all-permissions/>

  </security>

  <resources>

    <j2se version="1.5+"/>

    <%-- Launcher --%>

    <jar href="startup.jar"/>

   <extension name="Rcp Demo Feature" href="features/com.glnpu.demo.jnlp_1.0.0.jnlp"/>

       <property name="osgi.configuration.area" value="@user.home/RcpDemo/configuration"/>                                      

       <property name="osgi.instance.area" value="@user.home/RcpDemo/workspace"/>                                                                     

       <property name="eclipse.product" value="com.glnpu.demo.product"/>

  </resources>

  <application-desc main-class="org.eclipse.core.launcher.WebStartMain">                                                  

          <argument>-nosplash</argument>                                                       

  </application-desc>                     

</jnlp>

 

3.       页面调用代买index.html,如下:

<html>

  <head>

    <title>WebRCP Demo</title>

  </head>

  <body>

    <h1><a href="tutorial.jsp">Launch RCP com.glnpu.demo</a></h1>

  </body>

</html>

针对JNLP配置文件的详解:

临时翻译,错误难免,仅供参考:

<jnlp>元素

spec:必须是1.0及以上版本,这里用1.0+,不需修改。

codebase:资源的URL,是JNLP指向各连接的起始处,需自行修改。

Href:JNLP文件相对codebase的存放位置,和JNLP文件的全名,需自行修改。

<infomation>元素

Title:发布的应用程序简单标题,需自行修改。

Vendor:发行商信息,可以写上你的大名,需自行修改。

Homepage:存放有关应用程序的相关文档的URL,如help文件等,可有可无。

Description:对应用程序的描述,可以有多对<description></description>,可有可无。

Icon:用户下载你的应用程序后,在JWS里显示的图标的URL,应是gif或jpeg格式。需自行修改。

Offline-allowed:选择项,允许用户离线运行应用程序,一般都会有,不用修改。

<security>元素

选择项,如果没有指明<security>,默认是不允许应用程序访问用户的本地资源,即应用程序是沙箱运行。

如果设定为<all-permissions/>,则表示允许应用程序访问用户的本地资源。一般都会设定此值。

<resource>元素

<j2se version = 指定jdk版本>

<jar href = 指定需发布的应用程序的jar包存放的位置>

<application-desc>元素

main-class:应用程序运行启动的主类

<argument>:应用程序运行时的参数,可以有多个,每一个参数用一对<argument>参数</argument>。

       上面已经就本例子中的jnlp文件做了简单的说明。这里进行各个元素的详细说明。

JNLP文件有5个主要的元素:

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://www.mysite.com/application/" ...>
  <information> ... </information>
  <security> ... </security>
  <resources> ... </resources>
  <application-desc> ... </application-desc>
</jnlp>

引用外部资源:

       在JNLP文件中所有引用的外部资源都通过href属性来引用,例如:

<icon href="http://www.mysite.com/images/icon.gif">

<jar href="classes/MyApp.jar">

<jnlp href="http://www.mysite.com/App.jnlp">

 

作为一个链接的资源,其地址可以是相对的路径,也可以是绝对路径,读过上面的发布部分,已经可以认识到这一点了,EG:

<jnlp codebase="http://www.mysite.com/application/" ... >

在引用相应jar包时,链接也可以与jar的版本成对出现。EG:

<jar href="classes/MyApp.jar" version="1.2">

<jar href="classes/MyApp.jar" version = "1.4.0_04 1.4*&1.4.1_02+" />

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值