【问题标题】:Using Tycho, how do I build a Feature that includes other Features that I have built and deployed on my p2 repository使用 Tycho,我如何构建一个包含我在 p2 存储库上构建和部署的其他功能的功能
【发布时间】:2014-01-30 00:28:17
【问题描述】:

我想构建一个仅由我也使用 Tycho 构建的其他功能组成的功能。

所以,假设聚合器功能是 com.myurl.feature.agg

在其 feature.xml 文件中,我有几个看起来像这样的条目...

<feature>

    ...

   <includes
     id="com.myurl.feature.foo"
     version="1.0.12.qualifier"
     search-location="both"/>

   <includes
     id="com.myurl.feature.bar"
     version="1.1.4.qualifier"
     search-location="both"/>
</feature>

包含的两个功能已成功构建并驻留在我有权访问并已验证可以正常工作的 p2 存储库中。

我的 com.myurl.feature.agg 的 pom 文件具有对 p2 存储库的必要引用,我可以看到它成功找到了包含的功能,因为 mvn clean install 命令的输出...显示正在“获取”组成功能 com.myurl.feature.foo 和 com.myurl.feature.bar 的正确包。

但是,不久之后我收到了这个错误。

[ERROR] Cannot resolve project dependencies:
[ERROR]   Software being installed: com.myurl.feature.agg.feature.group 1.1.5.qualifier
[ERROR]   Missing requirement: com.myurl.feature.agg.feature.group 1.1.5.qualifier requires 'com.myurl.feature.bar.feature.group [1.1.4,1.1.5)' but it could not be found
[ERROR]
[ERROR] Internal error: java.lang.RuntimeException: No solution found because the problem is unsatisfiable.: [Unable to satisfy dependency from com.myurl.feature.agg.feature.group 1.1.5.qualifier to com.myurl.feature.bar.feature.group [1.1.4,1.1.5).; No solution found because the problem is unsatisfiable.] ->
[Help 1]
org.apache.maven.InternalErrorException: Internal error: java.lang.RuntimeException: No solution found because the problem is unsatisfiable.: [Unable to satisfy dependency from com.myurl.feature.agg.feature.group 1.1.5.qualifier to com.myurl.feature.bar.feature.group [1.1.4,1.1.5).; No solution found because the problem is unsatisfiable.]
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:164)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:555)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: java.lang.RuntimeException: No solution found because the problem is unsatisfiable.: [Unable to satisfy dependency from com.myurl.feature.agg.feature.group 1.1.5.qualifier to com.myurl.feature.bar.feature.group [1.1.4,1.1.5).; No solution found because the problem is unsatisfiable.]
    at org.eclipse.tycho.p2.resolver.AbstractResolutionStrategy.newResolutionException(AbstractResolutionStrategy.java:98)
    at org.eclipse.tycho.p2.resolver.ProjectorResolutionStrategy.resolve(ProjectorResolutionStrategy.java:88)
    at org.eclipse.tycho.p2.resolver.AbstractResolutionStrategy.resolve(AbstractResolutionStrategy.java:63)
    at org.eclipse.tycho.p2.impl.resolver.P2ResolverImpl.resolveDependencies(P2ResolverImpl.java:134)
    at org.eclipse.tycho.p2.impl.resolver.P2ResolverImpl.resolveDependencies(P2ResolverImpl.java:87)
    at org.eclipse.tycho.p2.resolver.P2TargetPlatformResolver.doResolvePlatform(P2TargetPlatformResolver.java:369)
    at org.eclipse.tycho.p2.resolver.P2TargetPlatformResolver.resolveDependencies(P2TargetPlatformResolver.java:345)
    at org.eclipse.tycho.core.resolver.DefaultTychoDependencyResolver.resolveProject(DefaultTychoDependencyResolver.java:109)
    at org.eclipse.tycho.core.maven.TychoMavenLifecycleParticipant.afterProjectsRead(TychoMavenLifecycleParticipant.java:75)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:271)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:152)
    ... 11 more

任何人都可以帮我弄清楚为什么 Tycho 没有找到这种依赖关系,尽管它似乎很容易获得并且在构建的早期就成功找到了?

【问题讨论】:

    标签: maven eclipse-plugin eclipse-rcp tycho


    【解决方案1】:

    我发现了问题。我有一个包含在 p2 存储库上可用的功能的功能这一事实并不是我的问题的原因。您绝对可以使用 Tycho 做到这一点。

    我的问题在于 p2 存储库中的一项功能。有罪的功能是 com.myurl.feature.bar。

    我在构建或部署 p2 存储库的方式上做错了。我不确定它是什么,但是当我把它拆掉、重建并重新部署它时,一切都开始正常了。

    com.myurl.feature.bar 功能中的一些更改项是删除了在 site.xml 上显然是合法的操作系统特定条目,但不是 category.xml 文件。我之所以这么说,是因为 Eclipse 为两者提供的编辑器在它们之间存在主要区别。

    最奇怪的部分是我的 RCP 应用程序可以看到并成功使用这个 p2 存储库来安装 com.myurl.feature.bar,但是 tycho 无法在构建时使用它来解决依赖关系......至少不是直到我为它更改了 p2 存储库。

    dgolovin 的特别说明...据我所知,您绝对可以参考 p2 存储库中的功能并将它们包含在您的功能中,即使它们不是您构建的直接部分。

    【讨论】:

      【解决方案2】:

      您应该尝试删除 .qualifier。

      问候,

      【讨论】:

      • 这无助于解决问题。行为仍然相同。错误输出的一部分是告诉我没有找到依赖项仍然说它找不到版本 [1.1.4,1.1.5)
      【解决方案3】:

      将 feature.xml 更改为:

      <feature>
      
         ...
      
      <requires>
        <import feature="com.myurl.feature.foo" version="1.0.12" match="compatible"/>
        <import feature="com.myurl.feature.bar" version="1.1.4" match="compatible"/>
      </requires>
      

      p2 应该从您的 p2 存储库中获取最新的可用功能。

      【讨论】:

      • 我也试过了,还是不行。命令行输出显示正在从 p2 存储库中找到并获取最新项目。但是在输出之后,错误仍然出现,并说它无法解决项目依赖关系。
      • 发生这种情况是因为包含的功能应该是构建的一部分,它们不能从 p2repo 中使用。试试
      • 这不正是您的回答所说的吗?据我所知,您只是在评论中重复了它。我是否在评论中遗漏了与答案不同的内容?
      • 我也更新了评论,抱歉,我忘了提。我将包含更改为要求。包含要求引用的功能构建在同一个 Maven 反应器中。需求可以是对来自外部 p2repo IIRC 的功能的引用。
      • 我找到了问题所在。它与 com.myurl.feature.bar 的 p2 存储库有关,这是一个非常奇怪的问题,我不完全确定它出了什么问题。我只知道我束手无策,因此我更改了构建 com.myurl.feature.bar 的 category.xml 文件,方法是删除似乎属于 site.xml 文件但不属于类别的操作系统特定注释.xml 文件。一旦我解决了这个问题,tycho build 就发现包含的功能很好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 2013-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多