Eclipse p2命令行导出本地插件
? ?不知不觉也工作三年有余了,凭心而论绝非虚度光阴。只是本人十分懒惰,只是将一些个人理解和工作浅见记录在笔头却并没有在博客上进行记录与分享,那些记在纸上的东西日子长了不好管理,所以现在特开微博把技术性的东西写一写。有人看能交流固然好,没人看就权当是为自己的知识进行积累梳理了。
?引入正题, 最近在做一个给产品自动升级的feature,产品是基于ECLIPSE RCP架构的。关于ECLIPSE RCP的文章不多叙,网上资料有很多。目前的需求是在客户端通过服务端传过来的URL去访问一个Archiva服务器,从中获得自定义的库(说白了就是一些ECLIPSE 插件工程)下载到本地,然后替换本地客户端中的对应插件工程从而达到更新的目的。
? ?关于Archiva,感兴趣的同学可以从http://archiva.apache.org/进行更深入的了解。
? ?我要做的事情就是当获得了从Archiva平台得到工件(artifact)地址的时候,通过调用Eclipse p2的命令行方式来获得这个网络资源并且将它们安装到我的基于ECLIPSE RCP的客户端平台上。
简单介绍一下Eclipse p2的相关:
Eclipse p2 的全称是 Eclipse?Provisioning Platform的缩写。个人对于P2的理解就是他是一个集下载,发布,管理OSGI 束(bundle)的框架。OSGI框架只是一个理论基础,它的实现者之一就有大名鼎鼎的Eclipse equinox,我们熟悉的Eclipse就是在这套实现了OSGI标准的框架下运行的。我要做的事情是用eclipse p2的commandline来把制定的网络资源安装到我们的客户端平台中。不过在学习安装之前,应该先了解一下导出的机制。反正学都学了,不如就事儿连P2的导入机制和安装机制一起学习了。
从eclipse的官方网址可以找到关于p2的文档http://help.eclipse.org/helios/topic/org.eclipse.platform.doc.isv/guide/p2_overview.htm
?
可以看到使用P2在命令行的方式下导出工件可以有4种方式:
1.UpdateSite Publisher
2.Features And Bundles Publisher
3.Product Publisher
4.Category Publisher
这里我用到第二种的方式。
启动一个Features and Bundles publisher需要用到Eclipse或者已经发布出来的RCP产品的Application:
org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher
这个Application的一些参数说明如下,就不详细翻译了:
?
-metadataRepository <URI>
-artifactRepository <URI>
-source <path>
-bundles <path>
-features <path>
-compress
-append
-publishArtifacts
-source
).?
Ok,下面做个测试。我要把D:\testing\TDQ\TDQ_EE_MPX-All-r62258-V4.1.3\plugins\目录下的所有插件通过P2这个publisher倒出来。那么我可以执行下列命令行脚本。
?
eclipse -application org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher -metadataRepository file:D:\eclipse\eclipse_3.6\p2export\repository -artifactRepository file:D:\eclipse\eclipse_3.6\p2export\repository ?-srouce D:\testing\TDQ\TDQ_EE_MPX-All-r62258-V4.1.3\plugins -configs win32.win32.x86 -compress -publishArtifacts
?
注意:
1.命令开头的eclipse表示你当前的eclipse.exe所在目录或者你发布的ECLIPSE RCP产品的.exe文件
2.执行-application的时候要确保你的目标平台里有这个application所对应的插件,并且已经加载到目标平台的OSGI环境中。
3.metadataRepository参数和artifactRepository参数后面要跟的是URI,不要写错了。
4.可以用-bundles命令单独指定要导出的源bundles,同时用-features命令指定要导出的源feature。如果这么做了,那么久不用用-source来指定要导出的源路径了。