我有一个内部p2站点,我们在产品中使用了许多不同的实用程序功能。我刚刚添加了一组新的插件以及一个带有RAP实用功能的新功能(而“旧”功能用于RCP / SWT)。
为了编译内容,我使用了两个不同的目标平台(一个用于RCP,另一个用于RAP),并从插件和功能中引用这些平台。我组织了模块,所以我有两层父POM:
没有问题。一切都在编译,所有测试都在运行。
我甚至在这些功能(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构建具有这两种功能的更新站点?我是否必须制作具有所有可能依赖关系的组合目标平台,还是有其他方式?
答案 0 :(得分:3)
让我们从显而易见的开始:您希望聚合到p2存储库中的内容需要位于target platform中,因为构建只能使用目标平台中的内容。但这似乎不是你的问题 - 你想要聚合的事物的依赖性存在问题。
Currently,聚合内容的依赖关系也需要在目标平台中。您应该能够通过合并父母的配置来创建联合RCP和RAP目标平台。
不幸的是,这还不是全部:目前,还需要一次安装所有功能。这是Tycho在依赖解析期间模拟的:它假装使用模块的构建结果进行p2安装。如果在依赖项解析期间出现“无法立即安装”错误,您可以尝试将target-platform-configuration
开关allowConflictingDependencies
设置为true
。最初引入此开关是为了支持(现已弃用)eclipse-update-site
打包类型中的用例。我不确定它是否适用于eclipse-repository
。
如果它不起作用,我只看到构建两个单独的p2存储库的可能性,并将它们组合在一个额外的(后)构建步骤中。您既可以将两个p2存储库放在Web服务器上,也可以使用所谓的复合存储库对它们进行逻辑分组,也可以使用p2 mirror tool将两个存储库复制(“镜像”)。