6

Considerare un genitore testCycle con i moduli DummyCore e TestFramework.Posso evitare un ciclo di dipendenze con un fronte che è una dipendenza di test?

TestFramework dipende DummyCore, e DummyCore ha un dedepency test TestFramework.

Costruire e testare ogni modulo in modo indipendente non ha alcun problema. Ma mvn test dei genitori testCycle risultati in:

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 

di riprodursi:

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

La mia aspettativa era che Maven avrebbe costruito DummyCore src e poi venire a compilare i test compilerà TestFramework src, che non lo fa dipende da DummyCore. A questo punto avrebbe compilato DummyCore src + test e TestFramework src. Finalmente compilerà anche i test DummyCore. C'è un modo per dire a Maven di fare questo? Se no, come faresti a risolvere questo?

Spostare il tests in DummyCore in un modulo a sé stante che dipende DummyCore e TestFramework? Lo farei solo per soddisfare le persone.

+4

Nella mia esperienza, le dipendenze cicliche gridano sempre che c'è un problema con il design. Non importa se il ciclo è in un barattolo, un pacchetto o una classe. – Augusto

+1

@Augusto amen a quello –

risposta

4

Non è possibile risolvere questo conflitto con Maven o con qualsiasi altro strumento di creazione. Non è un problema di strumenti di costruzione, è un difetto architettonico e può essere risolto solo tramite refactoring.

Due opzioni vengono subito in mente:

1) Creare un nuovo modulo denominato "test_common" che contiene la roba che sia TestFramework bisogno e DummyCore necessità. Il make test_common è una dipendenza di entrambi i moduli.

2) Spostare gli elementi necessari a TestFramework da DummyCore a TestFramework. Quindi TestFramework non dipende da nulla e DummyCore dipende da TestFramework.

Ci sono molti modi per risolvere questo problema, ma le interdipendenze tra moduli circolari sono un grande momento NO-NO indipendentemente dalla lingua o dallo strumento di costruzione.

+2

è un problema di strumento di costruzione. Ho spiegato come un Maven più intelligente avrebbe potuto evitare il ciclo di dipendenza. – simpatico

+1

No, è un difetto di progettazione. Qualsiasi codice dipenda da entrambi i moduli deve esistere nel proprio modulo. Non è che tu stia soddisfacendo, è il tuo grafico delle dipendenze. – Ajax

+0

Si tratta di un problema di build. A livello pratico si desidera avere i test del modulo all'interno dello stesso modulo, tuttavia è logicamente separato e non vi è alcun motivo per cui questo non dovrebbe riuscire a compilare. Infatti, Gradle * può * gestire questo scenario. – funkybro

Problemi correlati