Tycho使用Nexus的p2 bundle缓存地址

通常使用Tycho构建RCP应用程序时,需要在pom文件中指定p2地址,如下:


        1.2.0
        UTF-8
        http://localhost:8081/nexus/content/repositories/eclipse416/ 
        http://localhost:8081/nexus/content/repositories/babel-416/


        
            edi
            p2
            ${eclipse}
        
        
            lang-pack
            p2
            ${lang-pack}
        

如果每次构建都从eclipse官网上下载插件,速度会很慢也不太稳定,一般我们都会搭建一个内网的p2仓库,使用nexus做p2服务器也是一个不错的选择。

nexus通常用来搭建maven私服,但通过nexus的nexus-p2-bridge和nexus-p2-repository插件,nexus也可以用来作为eclipse的p2服务器。使用nexus作为p2服务器的优势是,我们可以不用把eclipse的官方p2镜像完全下载到本地,只需把官方镜像地址配置到nexus,然后把nexus的p2库地址配置给tycho,这样tycho在构建时会自动从nexus下载所需的插件,按需下载,而且nexus有缓存功能,如果一个插件nexus缓存中没有,才会去远程p2中下载。

nexus的缓存位置一般在:
/sonatype-work/nexus/storage/

但是有时候我们会发现,在第一次构建成功后,从nexus的缓存中清空所有已缓存的插件,再次构建依然能构建成功,但是nexus的缓存中并没有新下载插件,只是新下载了几个索引文件(content.xml和artifact.xml),那么tycho从哪里获取到所需的插件的呢?

原来不只是nexus有缓存,tycho本质上是maven的插件,maven是有缓存的,tycho在构建的时候会首先从maven缓存库中检查是否有所需版本的插件,如果没有才从指定的p2地址中下载,tycho的缓存地址如下:


    |-- p2
        |-- binary //eclipse在各平台下的可执行文件
        |-- org/eclipse/update/feature //features
        |__ osgi/bundle //插件

所以如果要让tycho使用官方的最新p2的插件或者使用本地修改过的插件来构建rcp程序,可以通过清除tycho和nexus的缓存或修改tycho缓存中的插件来实现。
一个最主要的使用场景是,从Eclipse 4.8开始,Eclipse就加快了版本的迭代周期,每三个月发布一个版本,这样做带来的一个明显的问题就是功能的不稳定性增加,例如从Eclipse 4.11开始,帮助系统中的中文路径的帮助不能正确的显示,这个问题至少在4.18版本都没有修复,只能在本地缓存中修改对应的插件以修复该bug,然后使用修改过的插件来构建应用程序。

你可能感兴趣的:(Tycho使用Nexus的p2 bundle缓存地址)