Eclipse RCP 打包过程实战
1 准备
用Eclipse打包RCP应用,首先要有一个Product文件,创建product文件可以通过向导实现,这里不再进行探讨。
打开product文件后,在overview面板里填入些必要的信息,主要是product ID,Application等信息。
注意:上面那个"This product includes native launcher artifacts"不要勾选,有篇文章说最后无法生成exe要勾选这个,但实际上没用,还会引来很多错误。
第二个页面是contents,里面收集了程序所需要的各种插件,这个可以自动生成,也可以全部删除,然后使用Add功能把RCP的那个Plugin加进去,然后点击“Add Required Plugin”就可以自动加入所需的插件。
后面一些面板的内容感觉用处不大,可根据需要自行进行设置。我没用到,因为我一直都无法生成可执行程序,所以后面那些配置图标,欢迎图片的东西都没涉及到。
2 导出
回到overview面板,里面有个Eclipse Product Export Wizard链接,点击可以执行导出。
根据图片内容填一下,注意选择的目录必须为空,否则导出过程可能会出错而中断。
点击Finish开始进行导出。
3 问题与解决思路
正常情况下导出过程一般会出错,因为导出会根据导出计算机的配置情况千差万别,总有某个地方会出问题。
(1)涉及到pde.buildl里的genericTargets.xml相关的问题
根据我的经验,这里出现问题一般是插件之间的依赖。我不知道Eclipse打包程序是怎么判断插件依赖的,往往我系统里有这个插件但是Eclipse就是不认,网上疯狂百度,百度不行翻墙去google,终于发现了问题,是我程序里使用GEF的插件版本存在的一个BUG问题。这个插件引用了一个带版本号的库(就是前面图里的第一个插件com.ibm.icu),但是这个库后来版本号大更新废弃了原来的版本!然后就一直卡在这里。查了后发现后面的GEF版本改了这个问题,所以就更新了GEF的插件,解决了这个问题。
这个插入一个小技巧,如果想看哪个依赖出了问题,可以修改genericTargets.xml这个问题,在最后<target name="runDirector"></target>
这个标签里,加入一行“<record name="d:/lxm_eclipse_package.log" loglevel="verbose" />
”,可以在指定的文件里输出检查的结果。通过分析该文件可以查看问题出在哪里。一般看第一个就行,后面都是链式错误。
(2)打包完毕没有可执行文件输出
解决了上面的问题后,其实中间还有个环节可能出错,就是编译源代码出错。这个要检查导出目录的logs.zip文件,查找带Error的输出。有同学可能会问为什么在IDE没出错而打包时会出现编译错误呢?原因就是IDE里你用的JDK版本可能跟打包时不一样。如果IDE的JDK版本高(例如java11),而打包指定的JDK版本低(例如Java8),那么有些高版本支持的方法低版本可能就通不过,所以……。
所有问题都解决后,打包顺利完成!但是当你切换到输出目录时发现,没有你期望的***.exe出现!这很正常,我也没找到原因,但是打包是成功的,也就是该输出的都输出了,就是最后临门一脚失败了,没有把可执行文件拷过来。我虽然没解决这个问题,但是我找了个曲折的方法来解决这个问题。
首先到Eclipse的目录把eclipse.exe和eclipse.ini考到打包好的目录里。目录应该是这个样子的。
编辑eclipse.ini,修改里面的内容如下:
-startup
plugins/org.eclipse.equinox.launcher_1.6.400.v20210924-0641.jar
--launcher.library
plugins\org.eclipse.equinox.launcher.win32.win32.x86_64_1.2.600.v20220720-1916
-product
smartbox.product
-showsplash
D:\Program Files\eclipse\plugins\org.eclipse.epp.package.common_4.25.0.20220908-1200
--launcher.defaultAction
openFile
把里面提到了那两个plugins里的两个文件和目录,拷贝到当前目录的plugins里,注意一定要修改-product下面的那个文本,将其改成你导出的那个productID。
然后双击eclipse.exe就可以执行了。可以将eclipse.exe该名称你喜欢的名字,用工具软件修改下图标,甚至可以修改下splash图片,该图片存放在指定位置,名字固定为splash.bmp。
Q.E.D.
Comments | 0 条评论