我有一个分为 3 个存储库的 osgi 项目。每个存储库都有自己的内置到第谷的 p2 存储库中:
Repo1 -> P2 repo 1
Repo2 -> P2 repo 2
Repo3 -> P2 repo 3
此外,每个存储库都有一个目标定义文件,其中包括来自第三方 p2 存储库和另一个项目存储库(上面的 P2 repo1、P2 repo 2 或 P2 repo 3)的包。 Repo2 包含对 Repo1 包的依赖,Repo3 对 Repo1 和 Repo2 包的依赖:
Repo1 Target Definition -> Eclipse Orbit P2
Repo2 Target Definition -> Eclipse Orbit P2, P2 repo1
Repo3 Target Definition -> Eclipse Orbit P2, P2 repo1, P2 repo2
现在我有以下问题。构建第一个存储库后,P2 repo1 存储库更新并包含具有新快照版本的功能。 Repo2 和 Repo3 的目标定义依赖于 Repo1 bundle 的先前快照版本,如果不更新适当的目标定义(在 Eclipse 中,目标编辑器中有更新按钮),则无法构建这些存储库。
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
<unit id="com.myproduct.feature.api.game.feature.group" version="1.0.0.201509251400"/>
<unit id="com.myproduct.feature.impl.game.feature.group" version="1.0.0.201509251400"/>
<repository location="http:............../target/repository/"/>
</location>
因此不可能自动构建所有 3 个 repos,因此构建过程变得过于复杂:
- 提交第一个 repo 中的更改并使用 Jenkins 构建它
- 更新 repo2 的目标定义,使其指向新版本的 repo 1 特性
- 在 repo2 中提交此更新并使用 Jenkins 构建它
等....
我现在正在考虑使用 git 子模块来集成这 3 个存储库,以避免 p2 存储库或将所有存储库移动到一个存储库中。
最佳答案
将版本设置为0.0.0
我不知道如何使用Target Editor 编辑.target 文件来实现这一点,但您可以输入版本号0.0。 0
通过在 XML 或文本编辑器中编辑目标文件,如下所示:
<location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
<unit id="com.example.feature.group" version="0.0.0"/>
<repository id="my_repo" location="http://my/repo/path"/>
</location>
通过在目标文件中指定版本号 0.0.0
,您应该从 p2 存储库中获取该单元的最新版本。
就是说,使用这种惰性(更多关于下面的名称)指定版本的方式有严重的缺点。这使得返回并重建项目的旧版本变得非常困难,因为旧版本将从 p2 存储库中提取最新版本的依赖项,而不是正确的版本。
使用目标平台定义 DSL 和生成器
不要使用目标编辑器进行编辑,而是使用出色的 "Target Platform Definition DSL and Generator"反而。它允许您更明智地编辑目标文件。在上面的例子中,你可以使用 lazy
version 关键字来指定你想要 0.0.0
作为版本号。它看起来像这样:
location "http://my/repo/path" my_repo {
com.example.feature.group lazy
}
两全其美
可以在 command line 调用生成器(例如来自 pom.xml),这应该允许您在 .tpd 文件中省略版本号。由于 .tpd 文件中没有版本号,生成的 .target 文件将具有最新版本的解析版本号。如果将生成的 .target 文件保留为构建工件的一部分,您将能够根据正确的依赖项重建软件的旧版本。
关于java - 如何避免 eclipse 目标定义中的特定功能版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33646330/