使用Tycho来构建你的RCP程序(一) —— Plugin

因为工作的原因,接触到了一个RCP程序的升级工作(3.4 -> 4.4)。在升级的过程中,除了一些基本target platform API的迁移之外,遇到的最大问题就是如何在4.4的版本上构建出一个可用的应用程序。由于老版本的build是使用PDE+Ant来实现的,且在4.4之下之前的build代码已经无法使用,于是我们选择了Tycho来构建RCP程序。至于为什么选择Tycho而不是继续使用PDE,原因无外乎两个字:简单!

 

在开始介绍之前,请您确保您已经对RCP开发和Maven具备一定的了解。文中所有的RCP的例子都是基于JDK8 + eclipse 4.4 SDK + maven 3.2.5 + Tycho 0.22.0。

 

首先说说Tycho,关于Tycho, 在他的官网上(https://eclipse.org/tycho/)是这么介绍的:

写道
Tycho is a set of Maven plugins and extensions for building Eclipse plugins and OSGi bundles with Maven.

 

翻译过来也就是Tycho是一套可以构建eclipse plugin和OSGI bundle的Maven插件。由于Tycho在最大程度上复用了RCP开发当中的MANIFEST.MF文件,因此我们可以用极少的配置就可以完成所有的构建工作。Tycho支持三种打包类型:eclipse-plugin、eclipse-feature和eclipse-repository分别对应着RCP开发当中的plugin、feature以及P2 update site\product。如下表:

 

Package Type Description
eclipse-plugin Plugin
eclipse-feature Feature
eclipse-repository P2 update site & Product

 

由于Tycho本质上还是一套Maven的插件,所以他的配置文件自然而然的也就是我们熟悉的POM文件。对于每一个plugin或者feature等项目,我们都应该创建一个与之对应的POM文件。在实际的build过程中,tycho会通过POM文件去读取RCP程序中的配置文件(plugin.xml和MANIFEST.MF等)。在这里要特别的提一下,因为Maven中对Artifact定义和RCP中对Bundle定义是通过不同的标准来实现的。在POM文件中我们应该确保 Artifact ID 和Version 应该等同于MANIFEST.MF文件中的Bundle-Symbolic-Name和Version。同理假如我们一个plugin的version是1.0.0.qualifier,相对应的我们pom中的version应当是1.0.0-SNAPSHOT。

 

在介绍之前我们需要先做一些准备工作,我们需要让我们eclipse中的Maven插件(m2e)能读的懂Tycho的配置。我们需要做如下几步:

 

    1. Preferences -> Maven -> Discovery -> Open Catalog

    2. 在弹出的对话框中找到Tycho Configurator,然后勾选安装。如下图 使用Tycho来构建你的RCP程序(一) —— Plugin_第1张图片

 

 

经过一段漫长的等待之后,Tycho Configurator安装完毕。如果你本地已经配置了4.4的target platform,接下来我们需要用来生成一个最简单的plugin用来展示Tycho:

 

    1. File -> New -> Other

    2. 在弹出的对话框中选择Plug-in Project -> Next

    3. 在Plugin创建的界面中输出一个项目名称-> Next

    4. 在接下来的Content对话框中,我们给出一些Plugin的properties.

    5. 把Would you like to create a 3.x rich client application置成Yes -> Next

    6. 在Templates对话框中选择RCP Mail Template -> Finish

 

完成了繁琐的准备工作之后,我们终于开始进入正题。由于生成的Plugin项目并不是一个Maven的项目,我们首先需要把他Convert成为一个Maven的项目。右键项目名 -> Configure -> Convert to Maven Project。这个时候会弹出一个对话框,需要我们给出一下POM的基本信息。根据之前介绍的Tycho插件的命名规范,我们把POM配置如下:


使用Tycho来构建你的RCP程序(一) —— Plugin_第2张图片
 

正如文中开头所说的,POM中的Artifact ID 和Version 应该等同于MANIFEST.MF文件中的Bundle-Symbolic-Name和Version。如果bundle的version定义是以qualifier结尾,POM中的version也就应该对应以SNAPSHOT结尾。最后,我们在packaging属性中给的是eclipse-plugin,这个属性会告诉Maven,这个项目是一个plugin项目。转化成Maven项目之后,我们会发现项目并不识别eclipse-plugin这种打包方式。

 

使用Tycho来构建你的RCP程序(一) —— Plugin_第3张图片
 

 这个错误是因为我们在POM文件中并没有提供Tycho的插件信息。于是我们加入如下的代码到POM中。

 
		0.22.0
		http://download.eclipse.org/releases/luna
	
	
	
		
			luna
			${luna-repo.url}
			p2
		
	
	
	
		
			
				org.eclipse.tycho
				tycho-maven-plugin
				${tycho.version}
				true
			
		
	

 

上面的这段XML中,repository中配置的是target platform的信息,在这里我们用的是eclipse 4.4 luna 版本的SDK. plugin当中就是Tycho插件的信息了。我们用的是0.22.0版本。保存POM,发现依然有错误。


使用Tycho来构建你的RCP程序(一) —— Plugin_第4张图片
 

这个错误的原因是我们的项目配置并没有随着POM的更新而更新,选中这个错误然后Ctrl+1会弹出一个Quick Fix对话框,在Quick Fix对话框中,我们快速修复这个错误。


使用Tycho来构建你的RCP程序(一) —— Plugin_第5张图片
 

这个时候项目就应该没有错误了。


使用Tycho来构建你的RCP程序(一) —— Plugin_第6张图片
 

接下来我们就可以build这个plugin了,右键选择项目名-> Run As -> Manen build. 在弹出的对话框中,我们把Goals设定成为clean install

 

使用Tycho来构建你的RCP程序(一) —— Plugin_第7张图片
 

接下来我们运行这个Maven build,如果你是第一次运行,Maven会从eclipse luna P2的site上下载一些所需要的依赖到你本地的repository当中。如果你本地的repository已经包含了这些dependencies,tycho会直接build这个plugin项目并把build出来的jar安装到本地的repository当中。

[INFO] 
[INFO] --- tycho-p2-plugin:0.22.0:update-local-index (default-update-local-index) @ com.chnic.tycho.mail.plugin ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 30.733 s
[INFO] Finished at: 2015-04-13T16:46:34+08:00
[INFO] Final Memory: 66M/158M
[INFO] ------------------------------------------------------------------------

 

build成功之后,刷新plugin项目,会发现在target文件夹当中多出了许多的东西。

 

使用Tycho来构建你的RCP程序(一) —— Plugin_第8张图片
 

com.chnic.tycho.mail.plugin-1.0.0-SNAPSHOT.jar就是Tycho为这个plugin所build出来的jar包。至此,我们用Tycho构建了你的第一个plugin。

你可能感兴趣的:(RCP)