问题

Eclipse新的P2 Update机制,使用起来很方便,如果使用P2 plugin自带的UI,开发者完全不用写任何代码 即可实现application的在线更新。 但是P2 Update至少有2个已知的bug,都是打包jre相关的问题,讲清楚后,你会发现解决方案很简单,但是厘清之前,它甚至可能困恼你几天而没有头绪。(注:笔者当前使用的eclipse版本为4.3)

Bug1:https://bugs.eclipse.org/bugs/show_bug.cgi?id=300812

更新时更新jre目录失败,错误消息类似于

Backup of file [...]\eclipse\jre\lib\jsse.jar failed.
File that was copied to backup could not be deleted: [...]\eclipse\jre
\lib\jsse.jar.

或者

"Can't remove application_path/jre/jre/lib/charsets.jar"

这个bug是由于如果你打包产品时,勾选了Bundle JRE for this enviroment with the product。那么除了自动生成jre目录外,repository目录中也会包含jre的更新。那么,问题就来了,你打包在产品中的jre正在被使用,同时更新程序又企图backup、delete、update它,于是报错。

Bug2:http://www.eclipse.org/forums/index.php?&t=msg&th=162865

简单说,就是即使你去掉了对Bundle JRE for this enviroment with the product的勾选,打包时照样会生成jre目录。

解决方案

对于Bug1, 解决方案很简单,就是不要勾选Bundle JRE for this enviroment with the product,不自动打包jre。但是,这时候你就面临Bug2。

NOTE:

如果你是基于feature打包而不是plugin打包。那么还有一个解决办法,就是把jre打包到一个独立的feature中去,并且永远不增加这个feature的版本号,这样这个feature就不会被更新了。实际配置当然要复杂得多,而且我也还没试成功,参考https://bugs.eclipse.org/bugs/show_bug.cgi?id=300812 Comment23

对于Bug2,我给出的链接中有许多讨论,我试了真正有用的只有一个:那就是重装eclipse,然后永远永远不要勾选“Bundle JRE for this enviroment with the product”。

最后,如果结果是不能打包jre,那么上面的都是废话了。其实解决方案也很简单,就是把jre目录手动拷贝到application的根目录,然后在根目录的ini文件中加入以下两行:

-vm
./jre/bin

参考

If your Eclipse-RCP application does not want to work with update site.

RCP: P2 Update两个烦人bug和解决办法的更多相关文章

  1. 【转载】IE浏览器常见的9个css Bug以及解决办法

    IE浏览器常见的9个css Bug以及解决办法 我们在浏览网页的时候经常看见这样的现象:某个网页在IE6浏览器中打开很正常,但是在IE8里面打开可能完全变形了.或者也有可能出现完全相反的现象.这让We ...

  2. oracle执行update语句时卡住问题分析及解决办法

    转载:http://www.jb51.net/article/125754.htm 这篇文章主要介绍了oracle执行update语句时卡住问题分析及解决办法,涉及记录锁等相关知识,具有一定参考价值, ...

  3. 记CRenderTarget:DrawText()绘制中文乱码的BUG及解决办法

    原文:记CRenderTarget:DrawText()绘制中文乱码的BUG及解决办法 转载请注明出处:http://www.cnblogs.com/Ray1024 一.问题描述 在MFC中使用Dir ...

  4. Dumpzilla工具第615行bug的解决办法

    Dumpzilla工具第615行bug的解决办法   在Dumpzilla使用选项frequency时,会提示SQL语法错误.这是由于其中SQL语句编写错误.需要将615行中: where url l ...

  5. (原创)spring mvc和jersey rest 组合使用时单例对像实例化两次的BUG及解决办法

    项目中没用spring 的restTemplate 而是采用 jersey来做rest 的实现,一直用着,也没发现有什么不对,后来加入了,以quartz用硬编码方式实现,结果启动项目的时候报错 ,具体 ...

  6. ie6双边距bug及其解决办法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. 最新版jQuery v3.3.1的BUG以及解决办法(什么问题不重要,怎么解决问题才重要)

    发现问题 最新版的 FineUIPro v5.2.0 中,我们将内置的 jQuery v1.12.4 升级到 jQuery v3.3.1 ,可以看升级记录: +升级到jQuery v3.3.1.    ...

  8. React + antd 组件离开页面以后出现Can only update a mounted or mounting component 的解决办法

    做项目的过程中,来回切换页面时,一直遇到Can only update a mounted or mounting component 这个问题,原因是当离开页面以后,组件已经被卸载,执行setSta ...

  9. 【转】JS浮点数运算Bug的解决办法

    37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只有一 ...

随机推荐

  1. ZedBoard 引脚约束参考

    从ISE转换到Vivado时,UCF转XDC的几种方法: (1)软件自动转换 参考网址:Youtube 用ISE->EDK->PlanAhead打开所需转换的工程文件*.xise,并打开b ...

  2. 大数相乘nyoj28

    描述我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?   输入 输入一个整数m(0<m<=5000) 输出 输出m的阶乘,并在输出结束之后输入一个换行符 ...

  3. php课程---初学练习

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. IOS第八天(3:UITableViewController团购, 点击底部代码调整)

    ****代理者的方法中 // 通知页脚视图调整视图显示状态 [footerView endRefresh]; //发送代理通知的类中 /** 视图控制器刷新完成调用方法 */ - (void)endR ...

  5. Object对象类

    Object对象类是所有类的祖先,他是默认自动继承的 Java为什么要做一个对象类呢?对象类的目的就是归一了类型,他就是把所有的类所有的对象归纳成为 Object类型.因为对象他认为对象应该拥有一些什 ...

  6. [archlinux][hardware] 查看SSD的使用寿命

    因为最近把16GB的SSD做成了HDD的cache,所以比较关系寿命问题. 使用smartctl工具. 参考:https://www.v2ex.com/t/261373 linux 下面只有 smar ...

  7. mvc路由注意事项

    路由表中你增加的路由顺序是很重要的.我们自定义路由是增加在默认路由之前的. 假如你搞反了,那默认路由将永远替代调用自定义路由.

  8. Mac OS 电脑播放 iPhone音乐

    http://apple.stackexchange.com/questions/6173/can-i-play-audio-from-my-iphone-on-my-mac Simple, and ...

  9. UE4 性能优化方法(工具篇)

    本文依据UE4官方文档以及官方博客等总结而来,可能不全面,后面会陆续添加.内置工具的详细说明请参考官方文档. 游戏帧率很低,或者有卡顿的现象,可能会有很多原因,这时候不要乱猜,比如是不是人物太多了或者 ...

  10. 十分钟学会python

    1.raw_input的使用 从键盘读取信息,返回字符串. 例: hrs = raw_input("Enter Hours:")pay=raw_input("Enter ...