2012-07-04 27 views
9

Tengo dos módulos A y B. Actualy B es un complemento a A.
B depende de A en tiempo de compilación. A no depende de B. En un tiempo de ejecución Quiero añadir a la ruta de clase B, por lo que en pom.xml de un añado la siguiente dependenciaámbito de tiempo de ejecución de Maven y dependencia cíclica

pom.xml

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

proceso de Maven con el error 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é impacto dependencia de tiempo de ejecución de tiempo de compilación?

+1

Hay un buen enfoque para organizar su construcción para este tipo de proyecto. Si refactoriza el código que está compartido en otro módulo (C), el proyecto B ya no necesitará depender de A en tiempo de compilación. A y B pueden ambos depender de C. Entonces no es un problema que A dependa de B en tiempo de ejecución. Una buena forma de pensar en esto es considerar escribir una biblioteca, un grupo de código compartido, 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. – Conan

Respuesta

1

Según lo sugerido por Conan y, si es posible, extraiga su código común en un módulo separado para resolver la ciclicidad. Normalmente, en tales casos, se extraen 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. Algunas veces esto es muy difícil de resolver, pero modularizar el código te ayuda a descubrir cómo refactorizar tu código para que sea fácilmente reutilizable.

+1

El código de A no está bajo mi responsabilidad, así que no puedo separarlo. – user1500951

+0

Bueno, si se trata de un código que usted o su empresa idearon, este es el camino a seguir. Si no, en función de su ejemplo y de lo poco que nos ha dicho, no hay otra solución obvia. – carlspring

Cuestiones relacionadas