6

Considere un padre testCycle con los módulos DummyCore y TestFramework.¿Puedo evitar un ciclo de dependencia con un extremo siendo una dependencia de prueba?

TestFramework depende de DummyCore y DummyCore tiene un dedepency prueba en TestFramework.

Construyendo y probando cada módulo de forma independiente maven no tiene problemas. Pero mvn testtestCycle los padres resulta en:

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 

para reproducir:

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

Mi expectativa era que experto edificaría DummyCore src y luego venir a recopilar las pruebas compilará TestFramework src, que no lo hace Depende de DummyCore. En esta etapa, habría compilado DummyCore src + tests y TestFramework src. Finalmente compilará DummyCore pruebas también. ¿Hay alguna manera de decirle a maven que haga esto? Si no, ¿cómo solucionarías esto?

Mover el tests en DummyCore en un módulo propietario del sistema que depende de DummyCore y TestFramework? Haría eso solo para satisfacer a maven.

+4

En mi experiencia, las dependencias cíclicas siempre dicen que hay un problema con el diseño. No importa si el ciclo está en un frasco, un paquete o una clase. – Augusto

+1

@Augusto amén a que –

Respuesta

4

No puede resolver este conflicto con Maven o con cualquier otra herramienta de compilación. No es un problema de herramienta de compilación, es un defecto arquitectónico y solo puede abordarse a través del refactoring.

dos opciones vienen a la mente:

1) Crear un nuevo módulo llamado "test_common" que contiene la materia que tanto necesitan y TestFramework DummyCore necesidad. El make test_common es una dependencia de ambos módulos.

2) Mueva las cosas que TestFramework necesita de DummyCore a TestFramework. Entonces TestFramework no depende de nada y DummyCore depende de TestFramework.

Hay muchas maneras de resolver esto, pero las dependencias intermódulo circulares son un gran momento NO-NO independientemente del lenguaje o la herramienta de compilación.

+2

es un problema de herramienta de compilación. Expliqué cómo un Maven más inteligente podría haber evitado el ciclo de dependencia. – simpatico

+1

No, es un defecto de diseño. Cualquier código que dependa de ambos módulos debe existir en su propio módulo. No es maven que estés satisfaciendo, es tu gráfico de dependencia. – Ajax

+0

Es un problema de herramienta de compilación. En un nivel práctico, quiere tener las pruebas de su módulo dentro del mismo módulo, sin embargo, está lógicamente separado y no hay ninguna razón por la cual no se pueda compilar. De hecho, Gradle * puede * manejar este escenario. – funkybro

Cuestiones relacionadas