Tycho не может разрешить зависимость, настроенную в tycho-surefire-plugin

Я впервые работаю над проектом Eclipse RCP + Maven и хочу запустить несколько юнит-тестов для моих пакетов с помощью JUnit. Кажется, что наиболее рекомендуемый подход - создать фрагмент пакета и использовать что-то вроде плагина Tycho для разрешения зависимостей. Тем не менее, когда я бегу 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), оно работает.

Это конфигурация Tycho в моем тестовом фрагменте:

<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>

Как предлагается здесь, я добавляю эту функцию в качестве зависимости, потому что мой тестовый фрагмент требует некоторых других комплектов помимо своего хоста, поэтому я ожидал, что это сработает.

Какие-нибудь советы? Наиболее похожая проблема, которую я обнаружил, это одна, но оба решения у меня не сработали.

2 ответа

Решение

Начиная с Tycho 0.21.0, поддержка объявления зависимостей для проектов реакторов в плагине tycho-surefire только ограничена: они работают только в том случае, если у тестового проекта уже есть какая-либо другая зависимость от ссылочного проекта реактора. В вашем случае использования, когда вы добавляете зависимость к функции, это не тот случай.

Вы можете снова настроить конфигурацию зависимостей tycho-surefire-plugin, добавив зависимость POM в проект компонента:

<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>

Однако рекомендуемый способ указать дополнительные тестовые зависимости - сделать это в target-platform-configuration, а не в 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. Поэтому при переносе вашей конфигурации вам нужно адаптировать имена тегов:

  • <type> (Без изменений)
  • <artifactId><id>
  • <version><versionRange>

Примечание. Хотя имена тегов различны, семантика элементов одинакова: так что, хотя старое имя было <version>значение всегда интерпретировалось как диапазон версий. Диапазон версий, состоящий из одной версии, такой как 1.0.0 обозначает диапазон версий без верхней границы, т.е. версия 1.0.0 или более поздняя.

У меня просто была такая же проблема. Кажется, что с Tycho 0.21 зависимости должны быть добавлены с помощью плагина target-platform-configuration. См. Tycho bug 436617 Комментарий № 11 для примера.

Другие вопросы по тегам