Pessoal, estou modelando um ERP (Compras, Fiscal, Estoque e etc … ) e estou utilizando o maven2 para controle das dependências, porém, existe um problema referente a referência cíclica entre os módulos.
O projeto é constituido por N módulos.
POM Projeto:
<modules>
<module>modulo1</module>
<module>modulo2</module>
<module>modulo3</module>
</modules>
POM Modulo1:
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>modulo2</artifactId>
<version>${project.version}</version>
<type>ejb-client</type>
</dependency>
POM Modulo2:
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>modulo1</artifactId>
<version>${project.version}</version>
<type>ejb-client</type>
</dependency>
modulo1->modulo2
modulo2->modulo1
Sei que isso não é correto, porém, existem algumas entidades que pertencem ao domínio do modulo1 e outras entidades que pertencem ao domínio do modulo2, e as vezes pode existir uma relação entre elas, por exemplo: Tenho uma Entidade “Pedido” que pertence ao módulo de “Compras” e outra Entidade “NotaFiscal” que pertence ao módulo “Fiscal”, e tenho uma relação entre elas, por exemplo posso lançar uma “NotaFiscal” através de um “Pedido” e preciso guardar o relacionamento com esse “Pedido” e a mesma coisa acontece do outro lado, se lancei uma “NotaFiscal” através de um “Pedido”, no “Pedido” eu tenho que gravar a relação com “NotaFiscal”, porém, como cada Entidade está em um módulo está ocorrendo um problema de referência cíclica. Alguém tem alguma sugestão de como contornar essa problema?
Estou cogitando criar um módulo “domínio”/“entidades” ou qualquer coisa do tipo e todos os outros módulos terem dependências com ele, o único problema é o quesito tempo, isso vai exigir uma grande quantidade de refatoração, por isso gostaria de saber se existe outra solução.
- Error stacktraces are turned on.
[INFO] Scanning for projects…
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] The projects in the reactor contain a cyclic reference: Edge between ‘Vertex{label=‘br.com.copagaz:copamais-fiscal’}’ and ‘Vertex{label=‘br.com.copagaz:copamais-compras’}’ introduces to cycle in the graph br.com.copagaz:copamais-compras --> br.com.copagaz:copamais-fiscal --> br.com.copagaz:copamais-compras
[INFO] ------------------------------------------------------------------------
[INFO] Trace
org.apache.maven.BuildFailureException: The projects in the reactor contain a cyclic reference: Edge between ‘Vertex{label=‘br.com.copagaz:copamais-fiscal’}’ and ‘Vertex{label=‘br.com.copagaz:copamais-compras’}’ introduces to cycle in the graph br.com.copagaz:copamais-compras --> br.com.copagaz:copamais-fiscal --> br.com.copagaz:copamais-compras
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:295)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Caused by: hidden.org.codehaus.plexus.util.dag.CycleDetectedException: Edge between ‘Vertex{label=‘br.com.copagaz:copamais-fiscal’}’ and ‘Vertex{label=‘br.com.copagaz:copamais-compras’}’ introduces to cycle in the graph br.com.copagaz:copamais-compras --> br.com.copagaz:copamais-fiscal --> br.com.copagaz:copamais-compras
at hidden.org.codehaus.plexus.util.dag.DAG.addEdge(DAG.java:143)
at hidden.org.codehaus.plexus.util.dag.DAG.addEdge(DAG.java:123)
at org.apache.maven.project.ProjectSorter.(ProjectSorter.java:118)
at org.apache.maven.execution.ReactorManager.(ReactorManager.java:99)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:288)
… 11 more
[INFO] ------------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Thu Aug 30 15:44:05 BRT 2012
[INFO] Final Memory: 2M/15M
[INFO] ------------------------------------------------------------------------
Atenciosamente,
David Machado