和swing应用的直接跨平台不同,swt/rcp应用要想同时支持不同平台,需要做些特殊的配置,不过并不复杂,记录在此,希望能帮到有需要的朋友。目前win32、32位linux、64位linux和mac os x基本上就覆盖了所有主流的桌面操作系统,本文将以同时支持这四种os为例来进行讲解。
首先是下载对应版本的rcp框架在不同操作系统的插件,将它们放在同一个plugins目录,比如你可以用win32为基础,然后添加针对其他平台的如下插件:
org.eclipse.core.filesystem
org.eclipse.core.filesystem.win32.x86
org.eclipse.core.filesystem.linux.x86
org.eclipse.core.filesystem.linux.x86_64
org.eclipse.core.filesystem.macosx
org.eclipse.core.net
org.eclipse.core.net.win32.x86
org.eclipse.core.net.linux.x86
org.eclipse.core.resources
org.eclipse.core.resources.win32.x86
org.eclipse.equinox.launcher
org.eclipse.equinox.launcher.win32.win32.x86
org.eclipse.equinox.launcher.gtk.linux.x86
org.eclipse.equinox.launcher.gtk.linux.x86_64
org.eclipse.equinox.launcher.carbon.macosx
org.eclipse.equinox.security
org.eclipse.equinox.security.win32.x86
org.eclipse.equinox.security.macosx
org.eclipse.swt
org.eclipse.swt.win32.win32.x86
org.eclipse.swt.gtk.linux.x86
org.eclipse.swt.gtk.linux.x86_64
org.eclipse.swt.carbon.macosx
接下来将不同平台下的eclipse可执行文件(windows下面是eclipe.exe,linux下是eclipse,mac os x下面是eclipse.app)放到不同的子目录下,当然,如果你的rcp应用有别的名称,也可以重命名eclipse可执行文件,按照不同平台的规范更换图标,然后修改.ini文件让它的-startup和-startup.libraray参数指向相对路径中正确版本的插件即可。
最后分享一下我们软件部署的机制: 按照前面介绍的方式打包的应用程序,交到用户手里并不是很友好,因为需要他/她自己再做一次判断,当前的操作系统是什么,然后打开不同的目录去点击不同的可执行文件。我们的做法是单独提供一个swing程序,在客户端自动判断os,然后自动调用不同版本的可执行文件,同时,这个swing程序被做成java web start,把整个rcp客户端的下载和同步也处理掉,这样,对用户而言,整个过程就透明了,只需要一个jnlp,剩下的工作完全自动化。