我正在尝试从部署在远程Maven存储库中的Tycho功能工件构建p2存储库,而不必首先将工件安装到本地Maven存储库中(因为Tycho无法解析从产品到eclipse功能的引用)不同的反应堆构建),而无需在单个反应堆构建中一起构建所有功能和存储库.
背景
我有一个多模块Tycho项目,它构建了几个Eclipse插件和功能.
因此,我可以单独构建每个模块 - 以便我可以在我们的Nexus Maven存储库中引用OSGI工件 - 我已<pomDependencies>consider</pomDependencies>在我的目标平台中启用,并在模块之间添加Maven依赖项或像往常一样使用<dependency/>元素添加到存储库工件.
这很好用 - 我可以构建功能或运行插件测试,而不需要它们的相关插件在我的本地Maven存储库或同一个反应器构建中.例如,当我mvn test在插件测试项目上运行时,相关的依赖项将从Nexus下载,Tycho将很乐意解决Import-Package我的清单中的s,构建所有内容并运行测试.到现在为止还挺好.
我想从这些功能生成一个p2存储库,以便我可以从更新站点在Eclipse中安装它们,并且广告的方式是使用eclipse-repository打包类型.但是这里的计划失败了 - 在构建存储库时,Tycho似乎无法解决功能依赖关系,因为它可以在构建功能时解决插件依赖关系.所有尝试都产生:
[ERROR] Cannot resolve project dependencies:
[ERROR] Software being installed: my.eclipse.repository raw:0.0.1.'SNAPSHOT'/format(n[.n=0;[.n=0;[-S]]]):0.0.1-SNAPSHOT
[ERROR] Missing requirement: my.eclipse.repository raw:0.0.1.'SNAPSHOT'/format(n[.n=0;[.n=0;[-S]]]):0.0.1-SNAPSHOT requires 'my.prj.eclipse.project.feature.feature.group 0.0.0' but it could not be found
Run Code Online (Sandbox Code Playgroud)
我成功构建p2存储库有两种方法:
eclipse-repository在Tycho多模块项目中创建一个模块,并使用例如一次构建整个项目mvn verify,则功能可以很好地解决.但我不想这样做.我更愿意单独构建模块.这意味着我们的CI可以为每个模块提供一个指标,我们可以立即看到哪些模块测试失败了; 它为我们提供了并行构建的机会; 并且我们避免必须在未更改的模块上不断运行构建.不得不使用单片Maven构建将是一种耻辱.mvn install依赖项将Tycho项目安装到我的本地Maven存储库中.但我也不想这样做,因为这意味着构建本质上是不可再生的,因为它会对本地存储库的状态敏感.我们的CI目前设置为每个作业维护一个Maven存储库,并在执行开始时完全擦除它,以保护我们免受这种潜在的混乱.所以我的问题是:还有第三种方式吗?有什么方法可以让Tycho插件负责构建eclipse-repository包装类型以从远程Maven存储库下载功能吗?或者我可以从单独构建并部署到Maven存储库的插件构建p2存储库的任何其他方式?
我尝试过的事情包括:
jar和eclipse-feature明确地将功能添加到目标平台,例如
... …