使用Tycho构建OSGi插件项目
自动构建OSGi Plugin项目,一直以来就是个头疼的问题。直到 Tycho 的出现,这些都不在成为问题了。用它你可以很轻松来构建Eclipse插件(Eclipse Plugin) , Eclipse features , Eclipse的更新站点(Update Site)以及可以直接执行的Eclipse产品(Eclipse Product)。 Tycho插件将会直接使用Eclipse项目中MANIFEST.MF中所包含的依赖信息。这样依赖pom.xml文件就会很小。
Tycho简介
Tycho是Sonatype所倡导的基于Maven的构建系统,其目的在于以一种可重现的方式开发Eclipse插件。在编译插件时,Eclipse会稍微有所不同,因为OSGi在JAR之间建立了过滤器;所以当a.jar依赖于b.jar的时候,它不一定能够看到b.jar中所有的包。在历史上,Eclipse一直使用Ant作为PDE构建的基础——实际上,当你在IDE中构建Eclipse插件时,它会生成并自动删除一个build.xml文件,“build.properties”实际上会直接应用到Ant构建之中。
令人遗憾的是,基于Ant的构建往往难以调试,并且依赖解析的方式很复杂且难以进行搭建。另外一方面,对于Java和其他应用来讲,Maven都是事实上标准的构建工具,它具有内置的依赖解析和缓存机制,能够在任何的机器上运行标准的构建。
Tycho是一系列的Maven插件,类似于之前基于Ant的构建,但是会通过P2仓库进行解析并使用P2依赖(而不是中央仓库)。插件可以获取和使用build.properties来理解PDE的文件结构,并调用Eclipse的编译器(必要的OSGi过滤器已经就绪)来产生一个编译后的插件。要形成一个产品、特性(feature)或仓库会有多个独立的插件,所以可以使用已有PDE插件,并且抛弃掉Ant构建的复杂性并将其替换为几个相对简单的Tycho插件。
最好的一点在于Eclipse平台正在转移到全部使用Tycho进行构建,将其作为通用构建基础设施(Common Build Infrastructure)的一部分。现在可以检出Eclipse平台,然后只执行一条Maven命令就能进行构建。再加上,使用Gerrit(以及将来的GitHub)来接受开发者的贡献,这会使得Eclipse成为更为开放的社区并且将会鼓励更多的开发人员来提供贡献。
环境准备
在介绍使用Tycho来构建OSGi插件产品之前,假设已经进行了以下准备工作:
安装Maven
下载最新的Maven,并设置M2_HOME,将Maven/bin添加至对应的环境变量中。
安装Eclipse
推荐使用Eclipse4系列,因其内置了m2eclipse插件,本文中使用的是Juno版本。
使用Tycho构建Plugins
在插件目录中,添加pom.xml,如下图中的工程:com.yonyou.nc.codevalidator.rule-api中所示:
pom.xml文件中的内容如下:
其中groupId与maven中的命名类似,用于将插件包进行分类操作时使用,artifactId用来作为插件的唯一名称,要与MANIFEST中的Bundle-SymbolicName一致,version与MANIFEST.MF中的Bundle-Version一致。
packaging是使用Tycho的重点,确定该插件使用eclipse插件的方式进行打包操作,下面还会介绍到,当打包类型不同时,该选项的值也会不同。
如果此时运行mvn package,将会得到一个错误信息:”Unknown packaging: eclipse plugin”,为了解决这个问题,需要添加Tycho作为build plugin:
<build> <plugins> <plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>tycho-maven-plugin</artifactId> <version>${tycho.version}</version> <extensions>true</extensions> </plugin> <plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>tycho-p2-repository-plugin</artifactId> <version>${tycho.version}</version> </plugin> <plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>target-platform-configuration</artifactId> <configuration> <environments> <environment> <os>linux</os> <ws>gtk</ws> <arch>x86</arch> </environment> … </configuration> </plugin> </plugins> </build>
重新执行后,会发现另外一个错误:“Unsatifiable error”,这是因为我们没有添加对应的repository,以致于无法找到对应的eclipse bundle,需要添加Juno release repository:
<repositories> <repository> <id>juno</id> <url>http://download.eclipse.org/releases/juno</url> <layout>p2</layout> </repository> </repositories> |
现在运行mvn package,就可以将该bundle进行构建(注意,连上外网,并且不能有其他非eclipse bundle的依赖才能构建成功)。构建成功后,该bundle的jar包会放在target目录下。
使用Tycho构建Features和Update Sites
使用Tycho来构建Features和Update Sites其实与构建插件比较类似,只不过packaging类型不同而已。
Features: <packaging>eclipse-feature</packaging>
Update Sites: <packaging>eclipse-repository</packaging>
在构建feature时不需要特别注意,但是如果想要构建updatesite时,必须摒弃由eclipse自动生成的文件样式,新建category文件,整理后的updatesite工程如下图所示:
category.xml文件内容类似:
<?xml version="1.0" encoding="UTF-8"?> <site> <feature id="com.yonyou.nc.codevalidator.plugin.feature" version="0.0.0"> <category name="com.yonyou.nc.codevalidator.category"/> </feature> <feature id="com.yonyou.nc.codevalidator.plugin.domain.feature" version="0.0.0"> <category name="com.yonyou.nc.codevalidator.domain.category"/> </feature> <category-def name="com.yonyou.nc.codevalidator.category" label="NC规则检查插件"/> <category-def name="com.yonyou.nc.codevalidator.domain.category" label="NC领域规则集合"/> </site>
当项目中Features比较多并且数量比较大时,管理这些所有的pom.xml就比较复杂,此时我们可以使用Maven提供的继承结构,创建一个parent项目,放置在所有bundle的目录上层。
这样就可以在最外层parent上定义插件版本,依赖仓库等公共信息,而在各子插件中,Features和Update Sites中仅定义差异的部分即可,当版本进行变动时,就可以仅修改parent中的版本号,此时上一节中介绍的rule-api简化成以下内容,注意需要声明parent:
而在parent中可以定义各module,用来在parent进行一键式构建,此时parent的packaging类型为pom。
注意module声明的顺序,以依赖的顺序为准,否则在构建过程中会报错。
搭建Nexus私服
Nexus的OSS版是完全免费的Maven私服。很多企业都在使用它来构建团队内部的私服。在默认情况下Nexus OSS版是不支持eclipse 推出的p2这个仓库的,而Tycho就是依赖这种仓库。所以为了能和Tycho配合工作我们让Nexus加上这种能力,万幸的是sonatype已经开发出了nexus-p2-repository-plugin, nexus-p2-bridge-plugin这两个插件,他们为Nexus加上这两种能力。我们只需要安装这两个插件就好了。
插件安装目录:/nexus目录/nexus/WEB-INF/plugin-repository/,安装完成后启动nexus,用管理员登录对Repository进行管理,添加一个p2 proxy repository,使用juno的p2下载路径作为URL:
然后添加一个p2-group的configuration,将上一步骤中添加的juno p2 repository加入到该分组中。
这样,在原有的Repository就可以设置为刚配置的p2-group地址,当p2-group不存在对应的eclipse bundle时,会从远程的路径中获得。
<repositories> <repository> <id>juno</id> <url>http://localhost:8081/nexus/content/groups/p2-group</url> <layout>p2</layout> </repository> </repositories> |
部署构建至私服
如何将我们构建的bundle包发布至私服中?这里我们在构建中额外添加deploy命令来完成此项操作,mvn package deploy。
首先需要在Nexus中创建一个自己私有的仓库,步骤为Repositorys->Add->Hosted Repository,在页面的下半部分输入框填入Repository ID和Repository Name即可,如果要将构建部署至私服中,需要在构建的pom.xml文件增加distributionManagement配置项,
<distributionManagement> <repository> <id>local-nexus-release</id> <name>Internal Releases</name> <url>http://localhost:8090/nexus/content/repositories/releases/</url> </repository> </distributionManagement> |
其中的URL即为私服的Hosted仓库地址。配置完成后,执行mvn deploy,部署应该仍然不会成功,根据提示信息,Return code is: 401,这是因为发布者没有权限,需要将用户认证信息添加至maven/conf/settings.xml中,属于全局配置:
<server> <id>local-nexus-release</id> <username>admin</username> <password>admin123</password> </server> |
注意此时server的id与配置的repository id要保持一致,username和password为nexus私服中有部署权限的用户,可以在security->users中找到,如果第二次执行 mvn deploy 又失败,这次失败原因是Return code is: 400,原因是在创建仓库时在configuration中的Deployment Policy设置为了Disable Redeploy,修改为Allow Redeploy即可。
相关推荐
压缩包子文件的文件名“tycho_build_RCP_app”可能是一个示例项目,包含了一个使用Tycho构建的RCP应用程序的源代码和构建配置。通过分析这个项目,读者可以学习如何设置Tycho项目,如何定义依赖,以及如何执行构建...
6. 更新站点生成:Tycho还能够生成Eclipse更新站点,这样用户就可以通过Eclipse的“软件更新”功能来安装和更新由Tycho构建的插件和功能。 7. 灵活性:Tycho提供了自定义扩展点,允许开发者根据特定需求调整构建...
`maven-tycho-thirdparty` 是一个示例项目,它展示了如何在 Eclipse 插件项目中有效地管理和使用第三方依赖,结合 Maven 和 Tycho 进行构建。下面将详细介绍这个项目及其相关知识点。 1. **Maven**: Maven 是一个...
在本书中,作者介绍了OSGi的基本概念和高级语义,并且通过实例演示了如何使用Maven、Bndtools等工具来构建OSGi应用。Bndtools是一个强大的构建工具,它带有BND插件,可以帮助开发者打包、测试和调试OSGi Bundles。...
书中可能还会介绍使用Tycho构建工具链进行自动化构建,以及使用PDE Test框架进行单元测试和集成测试。 总之,Eclipse插件开发是一个涵盖广泛且深入的领域,它需要开发者熟悉Java编程、OSGi模块系统和Eclipse的API。...
2. **配置构建工具**:使用Maven或Gradle等构建工具,配置OSGi插件,以便生成符合OSGi规范的jar文件。 3. **创建启动配置**:定义一个启动配置,指定初始运行时需要的bundle及其依赖关系。 4. **打包**:使用如...
1. 采用Tycho进行构建:Tycho是一个基于Maven的插件构建系统,用于构建无Java应用程序的Eclipse插件。 2. 集成外部工具和框架:如集成Spring框架、Junit测试库等。 3. 网络和云服务:利用Eclipse插件实现与远程...
9. **Tycho Build System**:对于大型插件项目,Tycho是一个强大的构建工具,它可以处理复杂的插件和产品依赖关系,确保构建过程的正确性。 10. **P2 Update Mechanism**:Eclipse的P2更新机制允许用户方便地安装、...
HOME] /project.extra.bundle,所以我们有[ROOT-HOME] /project.extra.bundle/plugin-1,[ROOT-HOME] /project.extra.bundle/plugin- 2 加Maven的第谷的支持,您的OSGi插件跟踪维基(添加第谷的支持)[ ] 编辑[ROOT-...
- **插件项目构建**:使用PDE Build或Tycho进行自动化构建,生成可部署的插件和更新站点。 - **Eclipse Update Manager**:通过更新站点分发和安装插件,使得用户能够方便地获取和更新插件。 6. **调试与测试** ...
m2e代码质量 该项目提供了Eclipse插件,它们将Checkstyle和PMD的Maven和Eclipse插件联系在一起。 在使用Checkstyle或PMD的Maven项目... 这些Eclipse插件是使用Tycho Maven插件构建的。 OSGi,Eclipse和Maven的结合并不
总结起来,"pustefix-iwrapper-plugin-0.18.30.zip" 文件可能包含了一个更新版本的Tycho-Karaf-Bridge插件,这个插件简化了基于Maven的Apache Karaf项目的构建和部署流程。通过将OSGi模块打包成.kar文件,开发者可以...
而 Tycho 是一个 Maven 插件,专门用于构建基于 Eclipse 插件系统(PDE)的项目,它可以处理 Eclipse 插件和 OSGi 模块的依赖关系。在本示例中,我们将深入探讨如何将 Xtext 与多模块 Maven 项目结构以及 Tycho 结合...
在介绍完基础和高级主题之后,书中继续讨论了如何使用Maven Tycho构建插件、功能和更新站点,并使用SWTBot来自动化用户界面测试。这一部分对于希望通过自动化流程来提高开发效率和质量的开发者来说非常重要。 最后...
Tycho是Eclipse基金会的一个项目,专门用于构建基于插件的Eclipse RCP和OSGi应用。它扩展了Maven的功能,使其能够处理Eclipse插件和聚合工程的构建。Tycho通过解析MANIFEST.MF和plugin.xml等元数据文件,实现了对...
最后,Eclipse社区不仅仅关注IDE本身,还包括了众多与软件开发相关的项目,如Mylyn(任务跟踪集成)、Papyrus(UML建模)、Tycho(基于Maven的Eclipse插件构建系统)等。这些项目展示了Eclipse作为一个开放平台的...
此外,利用Tycho可以实现Maven化的插件构建流程,提升项目的管理和协作效率。 总结来说,Eclipse RCP是一个强大的桌面应用程序开发框架,Eclipse 4.X的改进为开发者带来了更高效、模块化的开发体验。通过深入学习和...