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 для примера.