2

我有一个内部 p2 站点,其中包含我们在产品中使用的许多不同的实用程序功能。我刚刚添加了一组新插件以及带有实用功能的 RAP 新功能(而“旧”功能适用于 RCP/SWT)。

为了编译东西,我使用了两个不同的目标平台(一个用于 RCP,一个用于 RAP)并从插件和特性中引用这些。我已经组织了模块,所以我有通常的两层父 POM:

  • ...父母 - 所有常见的 Tycho 和 Maven 预订
  • ...parent.rcp - 依赖/使用 RCP/SWT 功能的所有插件的容器 - 还将目标平台设置为包含 RCP/SWT 功能
  • ...parent.rap - RAP 相同

那里没有问题。一切都编译并运行所有测试。

我什至在这两个特性(RCP 和 RAP)中都有一些现有的插件,因为它们不依赖于任何 UI 功能(例如 OSGi 测试实用程序)。那里也没有问题。

但是...当我尝试使用这两种功能(RCP 和 RAP)创建一个 p2 更新站点时,我遇到了问题。我收到以下消息:

[INFO] Resolving dependencies of MavenProject: com.rcpcompany:com.rcpcompany.uibindings.updatesite:3.0.0-SNAPSHOT @ /Git/ui-bindings/com.rcpcompany.uibindings.updatesite/pom.xml
[INFO] Cannot complete the request.  Generating details.
[INFO] Cannot complete the request.  Generating details.
[INFO] {osgi.ws=gtk, osgi.os=linux, osgi.arch=x86, org.eclipse.update.install.features=true}
[ERROR] Cannot resolve project dependencies:
[ERROR]   Software being installed: com.rcpcompany.uibindings.updatesite raw:3.0.0.'SNAPSHOT'/format(n[.n=0;[.n=0;[-S]]]):3.0.0-SNAPSHOT
[ERROR]   Missing requirement: com.rcpcompany.utils.rap.feature.feature.group 1.0.0.qualifier requires 'org.eclipse.rap.ui.forms 0.0.0' but it could not be found
[ERROR]   Cannot satisfy dependency: com.rcpcompany.uibindings.updatesite raw:3.0.0.'SNAPSHOT'/format(n[.n=0;[.n=0;[-S]]]):3.0.0-SNAPSHOT depends on: com.rcpcompany.utils.rap.feature.feature.group [1.0.0,1.0.1)
[ERROR] 
[ERROR] Internal error: java.lang.RuntimeException: "No solution found because the problem is unsatisfiable.": ["Unable to satisfy dependency from com.rcpcompany.utils.rap.feature.feature.group 1.0.0.qualifier to org.eclipse.rap.rwt.osgi [2.0.0,2.1.0).", "Unable to satisfy dependency from com.rcpcompany.utils.rap.feature.feature.group 1.0.0.qualifier to org.eclipse.rap.rwt.testfixture [2.0.0,2.1.0).", "Unable to satisfy dependency from com.rcpcompany.utils.rap.feature.feature.group 1.0.0.qualifier to org.eclipse.rap.ui.forms 0.0.0.", "No solution found because the problem is unsatisfiable."] -> [Help 1]
    ....

由于更新项目与 RCP 目标平台相关联,我理解上述消息,因此 Tycho(或 p2)无法从 RAP 目标平台找到插件并抱怨。

(如果我创建两个不同的更新站点,一切正常,但我不希望这样:-/)

如何说服 Tycho 构建具有这两种功能的更新站点?我是否必须创建一个具有所有可能依赖项的组合目标平台,还是有其他方法?

4

1 回答 1

3

让我们从显而易见的开始:您想要聚合到 p2 存储库中的东西需要在目标平台中,因为构建只能使用目标平台中的东西。但这似乎不是您的问题 - 您要聚合的事物的依赖关系存在相当大的问题。

目前,聚合内容的依赖关系也需要在目标平台中。您应该能够通过合并父母双方的配置来创建联合 RCP&RAP 目标平台。

不幸的是,这还不是全部:目前,还需要能够一次安装所有功能。这就是 Tycho 在依赖关系解析期间所模拟的:它假装使用模块的构建结果进行 p2 安装。如果在依赖解析期间遇到“无法立即安装”错误,您可以尝试将target-platform-configuration开关设置allowConflictingDependenciestrue. 最初引入此开关是为了在(现已弃用)eclipse-update-site包装类型中完全支持您的用例。我不确定它是否适用eclipse-repository

如果它不起作用,我只能看到构建两个单独的 p2 存储库的可能性,并将它们组合到一个额外的(后)构建步骤中。您可以将两个 p2 存储库放在您的 Web 服务器上,并使用所谓的复合存储库对它们进行逻辑分组,或者使用p2 镜像工具将两个存储库复制(“镜像”)在一起。

于 2013-05-16T10:04:06.277 回答