Alcance del tiempo de ejecución de Maven y dependencia cíclica

Tengo dos módulos A y B. En realidad, B es un complemento de A.
B depende de A en tiempo de compilación. A NO depende de B. En el tiempo de ejecución de A, quiero agregar B a classpath, por lo que en pom.xml de A agrego la siguiente dependencia

pom.xml

    <dependency>
        <groupId>my_group</groupId>
        <artifactId>my_Plugin</artifactId>
        <version>${project.version}</version>
        <scope>runtime</scope>
    </dependency> 

El proceso de Maven falla con un error de dependencia cíclica

[ERROR] The projects in the reactor contain a cyclic reference: Edge between 'Vertex{label='A'}' and 'Vertex{label='B'}' introduces to cycle in the graph B-->A-->B -> [Help 1]

[ERROR]

¿Por qué la dependencia del tiempo de ejecución afecta el tiempo de compilación?

preguntado el 04 de julio de 12 a las 09:07

Hay un buen enfoque para organizar su compilación para este tipo de proyecto. Si refactoriza el código que se comparte en otro módulo (C), el proyecto B ya no necesitará depender de A en el momento de la compilación: A y B pueden depender de C. Entonces no es un problema que A dependa de B en tiempo de ejecución. Una buena manera de pensar en esto es considerar escribir una biblioteca, un montón de código compartible, y una aplicación, que es una colección de bibliotecas ensambladas. Un proyecto de aplicación en realidad no necesita contener ningún código. -

Una solución es agregar la dependencia cíclica a un perfil. De esa forma, Maven no se quejará de la dependencia cíclica cuando construyas el módulo A. -

1 Respuestas

Como sugiere Conan y, si es posible, extraiga su código común en un módulo separado para resolver la ciclicidad. Normalmente, en tales casos, uno extraería las interfaces comunes y las clases principales en un módulo separado que se extiende por ambos módulos que causan la dependencia cíclica. Luego eliminaría las dependencias directas de los módulos que inicialmente estaban en un estado cíclico. A veces, esto es muy difícil de resolver, pero la modularización del código lo ayuda a descubrir cómo refactorizar su código para que sea fácilmente reutilizable.

Respondido 04 Jul 12, 10:07

El código de A no está bajo mi responsabilidad, por lo que no puedo separarlo. - user1500951

Bueno, si es un código que usted o su empresa idearon, este es el camino a seguir. Si no, según su ejemplo y lo poco que nos ha dicho, no hay otra solución obvia. - primaveracarl

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.