Можно ли избежать цикла зависимости с одним ребром, являющимся тестовой зависимостью? - PullRequest
6 голосов
/ 17 мая 2011

Рассмотрим testCycle родителя с модулями DummyCore и TestFramework.

TestFramework зависит от DummyCore, а DummyCore имеет тестовую зависимость от TestFramework.

Сборка и тестирование каждого модуля независимо maven не имеет проблем. Но mvn test родители testCycle приводит к:

    The projects in the reactor contain a cyclic reference: Edge between 'Vertex{label='com.mysimpatico:TestFramework:1.0-SNAPSHOT'}' and 'Vertex{label='org.apache:DummyCore:1.0-SNAPSHOT'}' introduces to cycle in the graph org.apache:DummyCore:1.0-SNAPSHOT --> com.mysimpatico:TestFramework:1.0-SNAPSHOT --> org.apache:DummyCore:1.0-SNAPSHOT -> [Help 1]

To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.

For more information about the errors and possible solutions, please read the following articles:
[Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectCycleException

Воспроизвести:

wget http://dp4j.sf.net/debug/testCycle.zip
unzip testCycle.zip
cd testCycle; mvn test 

Я ожидал, что maven соберет DummyCore src, а затем для компиляции тестов скомпилирует TestFramework src, который не зависит от DummyCore. На этом этапе он скомпилировал бы DummyCore src + tests и TestFramework src. Наконец, он также скомпилирует DummyCore тесты. Есть ли способ сказать Maven, чтобы сделать это? Если нет, как бы вы обойти это?

Переместить tests in DummyCore в отдельный модуль, который зависит от DummyCore и TestFramework? Я бы делал это только для удовлетворения Maven.

1 Ответ

4 голосов
/ 10 февраля 2012

Вы не можете разрешить этот конфликт с Maven или любым другим инструментом сборки.Это не проблема инструмента сборки, это архитектурный недостаток, который можно устранить только с помощью рефакторинга .

Сразу приходят на ум два варианта:

1) Создать новыймодуль с именем «test_common», который содержит материал, необходимый как для TestFramework, так и для DummyCore.Make test_common является зависимостью обоих этих модулей.

2) Переместите материал, необходимый для TestFramework, из DummyCore в TestFramework.Тогда TestFramework ни ​​от чего не зависит, а DummyCore зависит от TestFramework.

Есть много способов решить эту проблему, но циклические межмодульные зависимости - это большое время НЕТ-НЕТ независимо от языка или инструмента построения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...