由于今天刚启动学习进程, 先粗略的介绍一些环境方面的搭建。
Eclipse插件的使用跟官方网站有写区别, 目前采用Eclipse RCP 3.4
【强烈建议采用Eclipse RCP 3.5 将在一个星期内发布, 3.4不能用wizard建立HelloWorld工程, 相当失败】
1. 安装。
似乎Eclipse的插件安装都推荐采用网络Update的方式。
按照官网的文档【http://www./rap/gettingstarted.php】
(不用去看视频教程, 基本废掉了,对Eclipse3.4而言,误导而已)
Update网址:
http://download./rt/rap/1.2/update (如果更新有问题,可以从http://www./rap/downloads/下载, 注意是最新版本)
重启之后,出现欢迎页面, 其中有一个Install Target platform的向导,默认安装即可。
2. 试用Demo
从Plug in中抽取一个RAP Demo, 步骤如下:
接下来,就是启动:
启动的方式有很多, 无论从plugin.xml, 还是Menifest.mf启动, 还是从工程启动,或者是Run as 归根到底是
下面的设置(从Run as 中打开的对话框):
在Eclipse 3.4的版本中,这里千万不要改第一个绿色框的rap, 否则将导致不可访问。
【后来会发现, 可以在扩展项中,增加branding, 就可以配置成其它的Sevelet name, 并且可以有不同的主题,
暂时记住这一点,默认的Servelet都是rap, 就OK!】
第二个框是EntryPoint, 是你制定Web访问的进入点, 可以从plugin.xml中设置或者MeniFest.mf文件中设置:
官方Demo都有设置的方法。 不再赘述。
启动RAP Application 及可以访问:
可能会遇到两个问题:
1. 启动后看到一堆错误Entry错误, 提示某些ID, 最后面出现了一个BadVersion Number, 表明你需要使用
1.6的JRE
2. 启动之后控制台没问题,但打开的浏览器中出现:
HTTP ERROR: 404ProxyServlet: /rap RequestURI=/rap 此时可能服务器还没有准备好, 需要再次刷新访问。 3. An entry point named 'XXX' does not exist. 说明你配置的EntryPonit存在问题, 多个工程尤其要注意这个问题, 可能你运行的是A工程,而实际上 Entry Point是B工程的, 更改设置即可,很简单。 4. 出现一大堆的Unkown ID,可能是依赖bundle没有加载成功, 上图里面的bundles中,点击add required bundles,就可以了。 RCP 工程和RAP工程的转化
今天做了一个从RCP插件工程转化到RAP的工作,
从自己的经验来看:
1. RCP 和RAP是不兼容的:
RCP的Target Platform和RAP的Target Platform 具有两个不同的插件空间, 因此在一个目标平台下, 两个工程是不能同时允许的。
2. 所谓RCP和RAP代码重用是指: RCP中引用的包名, 跟RAP几乎都是相同的。 只是外层的Jar包或者插件不同,
这样, 当RCP向RAP迁移时, 只需要改环境, 不需要改代码。
3. RCP和RAP在事件处理上面存在一些细微差别, 今天发现了一个Tree双击事件需要做一点处理。
4. 最大的问题来自单例的RCP模式和多用户访问的RAP模式, 请参考入门(五)的解释 1. MF没有除了Require-Bundle外,无任何区别 2. RAP的Require-Bundle只需要一个:org.eclipse.rap.ui 3. RAP存在Luanch文件 4. 扩展点不同, 两者的扩展点都是Plugin.xml来管理, RAP多了一个 5. 鼠标双击事件和单击事件造成延时,鼠标双击事件对很多控件可能不响应。 6. 有两种形式运行RAP工程:OSGI Frame Work 或者 RAP Application, 前者可以指定端口[默认9090],后者端口是随机的,但会告知一个URI给你 7. 通过Eclipse rcp wizard做一些简单的改造就可以生成RAP。 操作步骤很简单。
其他都不用改变。 RAP Branding设置, 跟Application直接相关
默认情况下, Application 访问的Sevelet为rap, 通过设置Branding, 可以修改访问路径:
注意下面的很多项不能为空
大多RCP是从RAP过来的, RCP是SignleTon模式, 而RAP却可以被不同站点访问. 因此这个问题就产生了: 该文题产生的原因是, 在多现程中访问平台资源. 解决方案: Runnable () {
但会带来另外一个问题, display的参数怎么得到, Display.getcurrent 和getDefault都实效的!
其他问题请查询官方wiki网站: Eclipse RAP中最有技术含量部分来了。
大概思路是:
服务端, java swt控件
客户端, js文件, source处理文件,
毫无疑问这两个同事存放在Server端, 但js必须提供给客户端, 以满足自定义控件事件的响应。 |
|