【问题标题】:Tycho cannot resolve dependency configured in tycho-surefire-pluginTycho 无法解析 tycho-surefire-plugin 中配置的依赖项
【发布时间】:2014-08-24 21:41:55
【问题描述】:

我第一次从事 Eclipse RCP + Maven 项目,我想用 JUnit 对我的包运行一些单元测试。似乎最推荐的方法是创建一个包片段并使用 Tycho 插件之类的东西来解决依赖关系。但是,当我在我的主 pom 中运行 mvn clean verify 时,它应该运行测试并部署我的应用程序,但我得到了以下错误:

[ERROR] Cannot resolve project dependencies:
[ERROR]   You requested to install 'myproject.app.feature.feature.group 1.0.0' but it could not be found
[ERROR] Failed to execute goal org.eclipse.tycho:tycho-surefire-plugin:0.21.0:test (default-test) on project myproject.app.viewmanager-test: Execution default-test of goal org.eclipse.tycho:tycho-surefire-plugin:0.21.0:test failed: No solution found because the problem is unsatisfiable.: [Unable to satisfy dependency from tycho-extra-1408913392535 0.0.0.1408913392535 to myproject.app.feature.feature.group 1.0.0.; Unable to satisfy dependency from tycho-1408913392552 0.0.0.1408913392552 to myproject.app.feature.feature.group 1.0.0.; No solution found because the problem is unsatisfiable.] -> [Help 1]

我了解 Maven 无法找到“myproject.app.feature.feature.group 1.0.0”,但我不知道它是从哪里得到的,因为它的名称似乎是错误的。

值得一提的是,当我在 Eclipse(而不是 Maven)中运行单元测试时,它可以工作。

这是我的测试片段中的第谷配置:

<plugin>
    <groupId>org.eclipse.tycho</groupId>
    <artifactId>tycho-surefire-plugin</artifactId>
    <version>${tycho-version}</version>
    <configuration>
        <useUIHarness>true</useUIHarness>

        <dependencies>
            <dependency>
                <type>eclipse-feature</type>
                <artifactId>myproject.app.feature</artifactId>
                <version>1.0.0</version>
            </dependency>
        </dependencies>

    </configuration>
</plugin>

正如here 所建议的那样,我将该功能添加为依赖项,因为我的测试片段除了它的主机之外还需要一些其他捆绑包,所以我期待它能够工作。

有什么建议吗?我发现的最相似的问题是this one,但两种解决方案都不适用于我。

【问题讨论】:

  • 我知道 Maven 找不到 'myproject.app.feature.feature.group 1.0.0' 但我不知道它是从哪里得到的,因为似乎名称是错误的。 - 实际上名称是正确的,但这很难看到。此错误消息直接来自 p2 解析器,因此它们处于非常低的抽象级别。例如,.feature.group 后缀是 p2 区分特征和包的方式。我写了一个wiki page 来帮助理解来自 p2 的错误消息。

标签: maven junit eclipse-rcp tycho tycho-surefire-plugin


【解决方案1】:

从 Tycho 0.21.0 开始,在 tycho-surefire-plugin 中声明对反应器项目的依赖关系的支持有限:它们仅在测试项目已经对引用的反应器项目具有其他依赖关系时才起作用。在您的用例中,您将依赖项添加到功能中,情况并非如此。

可以通过向功能项目添加 POM 依赖项来使 tycho-surefire-plugin 依赖项配置再次工作:

<dependencies>
   <dependency>
      <!-- Maven GAV of the feature project -->
      <groupId>myproject.groupId</groupId>
      <artifactId>myproject.app.feature</artifactId>
      <version>1.0.0-SNAPSHOT</version>
   </dependency>
</dependencies>

<build>
   <plugins>
      <plugin>
         <groupId>org.eclipse.tycho</groupId>
         <artifactId>tycho-surefire-plugin</artifactId>
         <version>${tycho-version}</version>
         <configuration>
            <dependencies>
               <dependency>
                  <type>eclipse-feature</type>
                  <artifactId>myproject.app.feature</artifactId>
                  <version>1.0.0</version>
               </dependency>
            </dependencies>
         </configuration>
      </plugin>
   </plugins>
</build>

但是,推荐指定额外测试依赖项的方法是在目标平台配置中而不是在 tycho-surefire-plugin 中执行此操作:

<plugin>
   <groupId>org.eclipse.tycho</groupId>
   <artifactId>target-platform-configuration</artifactId>
   <configuration>
      <dependency-resolution>
         <extraRequirements>
            <requirement>
               <type>eclipse-feature</type>
               <id>myproject.app.feature</id>
               <versionRange>1.0.0</versionRange>
            </requirement>
         </extraRequirements>
      </dependency-resolution>
   </configuration>
</plugin>

注意:与 tycho-surefire-plugin 相比,target-platform-configuration 中指定依赖项的元素名称不同。所以在迁移你的配置时,你需要调整标签名称:

  • &lt;type&gt;(不变)
  • &lt;artifactId&gt;&lt;id&gt;
  • &lt;version&gt;&lt;versionRange&gt;

备注:虽然标签名称不同,但元素的语义是相同的:所以即使旧名称是&lt;version&gt;,该值始终被解释为版本范围。由单个版本(如 1.0.0)组成的版本范围代表没有上限的版本范围,即版本 1.0.0 或更高版本。

【讨论】:

  • 感谢您的提示。我开始使用目标平台配置,它解决了非 GUI 测试片段的问题。很高兴知道这是推荐的方式。
【解决方案2】:

我只是遇到了基本相同的问题。似乎必须使用目标平台配置插件添加 tycho 0.21 依赖项。示例见tycho bug 436617 comment #11

【讨论】:

  • 太好了,这解决了我的大部分问题。但是,一些测试片段抱怨 JavaFX 缺少包,即使它们是在我的目标平台和功能中声明的。不过那是另一个话题了。谢谢。
猜你喜欢
  • 2021-07-10
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 2013-04-20
  • 2018-10-03
  • 2021-08-19
  • 2012-04-30
  • 1970-01-01
相关资源
最近更新 更多