`
chnic
  • 浏览: 228037 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • RCP
阅读更多

因为工作的原因,接触到了一个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 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配置如下:



 

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

 


 

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

 <properties>
		<tycho.version>0.22.0</tycho.version>
		<luna-repo.url>http://download.eclipse.org/releases/luna</luna-repo.url>
	</properties>
	
	<repositories>
		<repository>
			<id>luna</id>
			<url>${luna-repo.url}</url>
			<layout>p2</layout>
		</repository>
	</repositories>
	
	<build>
		<plugins>
			<plugin>
				<groupId>org.eclipse.tycho</groupId>
				<artifactId>tycho-maven-plugin</artifactId>
				<version>${tycho.version}</version>
				<extensions>true</extensions>
			</plugin>
		</plugins>
	</build>

 

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



 

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



 

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



 

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

 


 

接下来我们运行这个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文件夹当中多出了许多的东西。

 


 

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

  • 大小: 42.9 KB
  • 大小: 51.2 KB
  • 大小: 9.8 KB
  • 大小: 11.8 KB
  • 大小: 56.1 KB
  • 大小: 10.1 KB
  • 大小: 57 KB
  • 大小: 6.7 KB
分享到:
评论
9 楼 genius 2019-03-21  
tycho 里面编译grovvy怎么配置研究过吗?
8 楼 edhn 2017-11-14  
找半天资料发现只有此贴提到安装m2e connectors选择tycho
7 楼 liangxianfu5811 2016-09-01  
按照文章配置,最后报错,错误如下:
Caused by: org.eclipse.tycho.core.osgitools.OsgiManifestParserException: Exception parsing OSGi MANIFEST C:\Users\liangxf\.m2\repository\p2\osgi\bundle\com.ibm.icu\54.1.1.v201501272100\com.ibm.icu-54.1.1.v201501272100.jar: zip file is empty
        at org.eclipse.tycho.core.osgitools.DefaultBundleReader.doLoadManifest(DefaultBundleReader.java:67)
        at org.eclipse.tycho.core.osgitools.DefaultBundleReader.loadManifest(DefaultBundleReader.java:49)
        at org.eclipse.tycho.core.osgitools.EquinoxResolver.loadManifest(EquinoxResolver.java:269)
        at org.eclipse.tycho.core.osgitools.EquinoxResolver.newState(EquinoxResolver.java:161)
        at org.eclipse.tycho.core.osgitools.EquinoxResolver.newResolvedState(EquinoxResolver.java:69)
        at org.eclipse.tycho.core.osgitools.OsgiBundleProject.getResolverState(OsgiBundleProject.java:254)
        at org.eclipse.tycho.core.osgitools.OsgiBundleProject.resolveClassPath(OsgiBundleProject.java:156)
        at org.eclipse.tycho.core.resolver.DefaultTychoResolver.resolveProject(DefaultTychoResolver.java:130)
        at org.eclipse.tycho.core.maven.TychoMavenLifecycleParticipant.afterProjectsRead(TychoMavenLifecycleParticipant.java:77)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:266)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
        ... 11 more

我的pom.xml文件内容是:
<properties>
<tycho.version>0.22.0</tycho.version>
<mars-repo.url>http://download.eclipse.org/releases/mars</mars-repo.url>
</properties>
<repositories>
<repository>
<id>mars</id>
<url>${mars-repo.url}</url>
<layout>p2</layout>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-maven-plugin</artifactId>
<version>${tycho.version}</version>
<extensions>true</extensions>
</plugin>
</plugins>
</build>
我用的是eclipse-jee-mars-2-win32-x86_64版本的eclipse,不知道怎么解决
6 楼 chnic 2016-05-05  
jiangxinnju 写道
您好,根据您的教程使用maven来编写eclipse插件,但是遇到了一些问题,能不能请教一下?
我的QQ:1027980638
我的邮箱:jiangxinnju@163.com


你好,Tycho只是一套RCP程序的构建工具,并不能用来编写plugin,plugin属于RCP的开发内容,你可以搜一下RCP开发的相关教程。
5 楼 jiangxinnju 2016-04-24  
您好,根据您的教程使用maven来编写eclipse插件,但是遇到了一些问题,能不能请教一下?
我的QQ:1027980638
我的邮箱:jiangxinnju@163.com
4 楼 chnic 2016-04-08  
heriane 写道
eclipse 4.4 SDK + maven 3.2.5 + Tycho 0.22.0。   如何查看当前Tycho的version信息?Project build error: Unresolveable build extension: Plugin org.eclipse.tycho:tycho-maven-plugin:0.22.0


很明显你这个错误是你的build环境无法解析tycho的这个plugin,首先确定你已经在eclipse上已经安装了Tycho Configurator.如果没安装的话,ecplise在解析的时候会出错的。
在build的时候Maven通过Tycho Configurator解析出你POM里的tycho的信息,然后从repository里去下载。
3 楼 heriane 2016-04-05  
eclipse 4.4 SDK + maven 3.2.5 + Tycho 0.22.0。   如何查看当前Tycho的version信息?Project build error: Unresolveable build extension: Plugin org.eclipse.tycho:tycho-maven-plugin:0.22.0
2 楼 chnic 2016-02-24  
Yan_Sunny 写道
hello,为什么我在将plugin项目转换成maven项目的时候没有你说的 packaging:“eclipse-plugin”选项。


这个选项是需要自己敲进去的,因为eclipse在你把你的project convert to maven project的时候默认不提供这个选项的。。
1 楼 Yan_Sunny 2016-02-18  
hello,为什么我在将plugin项目转换成maven项目的时候没有你说的 packaging:“eclipse-plugin”选项。

相关推荐

    tycho_build_RCP_app.rar.zip

    标题中的"tycho_build_RCP_app.rar.zip"表明这是一个使用Tycho构建的Eclipse RCP(Rich Client Platform)应用程序的源码压缩包,且文件格式是rar和zip的结合。RCP是Eclipse框架用于创建桌面应用的方式,而Tycho则是...

    maven-tycho-thirdparty:在 Eclipse 插件中使用第三方依赖与 Maven 和 Tycho

    它扩展了 Maven 的生命周期,使其能够处理 Eclipse 描述符文件(如 `.plugin.xml`, `.features.xml`)和构建 Eclipse 插件、RCP 应用程序、产品配置等。Tycho 可以在不使用 Eclipse IDE 的情况下,基于 Maven 构建...

    Maven-Tycho-Demo:在Eclipse中构建Maven Tycho的部署示例-开源

    通过Tycho,你可以使用Maven的强大的依赖管理和构建流程来处理Eclipse插件的构建问题,避免了传统Ant脚本的复杂性。 ** Maven Tycho的核心概念 ** 1. **基于POM的构建**:Tycho遵循Maven的约定,使用Project ...

    eclipse_plugin

    8. **Tycho构建工具**:对于复杂的插件系统,Tycho是一个强大的Maven插件,可以帮助构建和部署Eclipse插件和RCP应用。 9. **P2更新机制**:Eclipse的P2(Provisioning Platform 2)是用于管理插件和软件更新的机制...

    eclipse插件开发步步教你

    Eclipse是一款广泛使用的开源集成开发环境(IDE),其强大的可扩展性主要体现在插件系统上。Eclipse插件开发是构建...通过本教程,你将逐步掌握这一技能,从而能够根据需求定制自己的Eclipse环境或构建独立的RCP应用。

    Eclipse插件开发学习笔记全篇+源码.rar

    1. 插件体系结构:理解Eclipse的插件模型,如何通过插件来构建可扩展的应用。 2. OSGi框架:Eclipse基于OSGi运行,了解OSGi的概念和它在插件中的作用。 3. PDE(Plugin Development Environment):Eclipse内置的...

    p2-maven-plugin:Maven3插件可自动执行Eclipse RCP的第三方依赖关系管理

    这是一个易于使用的Maven3插件,负责Eclipse RCP环境中的第三方依赖关系管理的自动化。 你为什么要打扰? 您是否熟悉Maven,Gradle或其他任何精美工具中的自动依赖项管理? 您只需定义一个项目描述符,添加一堆...

    eclipse权威开发指南2光盘(插件开发部分代码)

    6. **RCP(Rich Client Platform)**:Eclipse RCP是一个用于构建桌面应用程序的框架,它基于Eclipse插件系统。通过RCP,开发者可以快速构建功能丰富的跨平台应用程序。 7. **Equinox**:Eclipse的运行时环境,是...

    eclipse开发团队技术介绍.zip

    开发者需要学习Plug-in Development Environment (PDE),这是一个Eclipse内建的工具集,用于构建、调试和打包Eclipse插件及RCP(Rich Client Platform)应用程序。 此外,可能还会涉及到Eclipse的扩展点(Extension...

    rascal-java-build-manager

    Maven是Apache开发的一款项目管理和综合工具,它通过使用XML文件(pom.xml)来描述项目配置,包括依赖关系、构建过程和项目信息。Maven的核心理念是“约定优于配置”,即提供一套默认的构建规则,使得大多数项目无需...

    eclipse工具5

    15. **Tycho**:一个Maven插件,用于构建和测试Eclipse插件和RCP应用程序。 16. **EMF(Eclipse Modeling Framework)**:用于创建和操作模型的框架,常用于生成代码和持久化数据。 以上就是关于"Eclipse工具5"的...

    Eclipse常用插件

    - **Tycho**:基于Maven的Eclipse插件构建系统,用于构建纯Eclipse插件或RCP应用。 - **PMD/Checkstyle**:代码质量检查工具,帮助遵循编码规范,避免潜在问题。 - **FindBugs**:静态代码分析工具,检测潜在的...

    elipse 插件开发手册

    - **插件项目构建**:使用PDE Build或Tycho进行自动化构建,生成可部署的插件和更新站点。 - **Eclipse Update Manager**:通过更新站点分发和安装插件,使得用户能够方便地获取和更新插件。 6. **调试与测试** ...

Global site tag (gtag.js) - Google Analytics