6

Należy rozważyć rodzica testCycle z modułami DummyCore i TestFramework.Czy mogę uniknąć cyklu zależności, w którym jedna krawędź jest zależna od testu?

TestFramework zależy DummyCore i DummyCore ma dedepency testowy na TestFramework.

Budowanie i testowanie każdego modułu niezależnie maven ma żadnych problemów. Ale mvn test wyników przez rodziców testCycle w:

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 

Aby odtworzyć:

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

moje oczekiwanie, że będzie budować DummyCore Maven SRC a następnie zbliża się do opracowania testów będzie skompilować TestFramework src, co nie zależy od DummyCore. Na tym etapie skompilowałby on src + testy DummyCore i TestFramework src. W końcu będzie również kompilować testy. Czy istnieje sposób, aby powiedzieć mavenowi, aby to zrobił? Jeśli nie, jak by to obejść?

Przesuń tests w DummyCore do modułu własnych, które zależy od DummyCore i TestFramework? Robiłbym to tylko po to, żeby zadowolić mavena.

+4

Z mojego doświadczenia, cykliczne zależności zawsze krzyczą, że jest problem z projektem. Nie ma znaczenia, czy cykl jest w słoiku, paczce czy klasie. – Augusto

+1

@Augusto amen to –

Odpowiedz

4

Nie można rozwiązać tego konfliktu z Maven ani z żadnym innym narzędziem do budowania. Nie jest to problem z narzędziem do budowania, jest wadą architektury i można go rozwiązać tylko przez refactoring.

Dwie opcje są natychmiast do głowy:

1) Utwórz nowy moduł o nazwie „test_common”, która zawiera materiał, który zarówno TestFramework potrzeba i DummyCore potrzeby. Marka test_common jest zależna od obu tych modułów.

2) Przenieś rzeczy, które potrzebuje TestFramework z DummyCore do TestFramework. Wtedy TestFramework zależy od niczego, a DummyCore zależy od TestFramework.

Istnieje wiele sposobów na rozwiązanie tego problemu, ale cykliczne zależności między modułami to duże NIE-NIE, niezależnie od języka lub narzędzia do kompilacji.

+2

To jest problem z narzędziem do kompilacji. Wyjaśniłem, w jaki sposób mądrzejszy Maven mógł uniknąć cyklu zależności. – simpatico

+1

Nie, to wada konstrukcyjna. Niezależnie od kodu zależy od obu modułów musi istnieć w swoim własnym module. To nie jest zadowalające, to twój wykres zależności. – Ajax

+0

To jest problem z narzędziem do kompilacji. Na poziomie praktycznym chcesz mieć testy modułu w tym samym module, jednak jest to logicznie oddzielne i nie ma powodu, dla którego nie uda się go skompilować. W rzeczywistości Gradle * może * obsługiwać ten scenariusz. – funkybro

Powiązane problemy