Como resolver ProjectCycleException com Maven [RESOLVIDO]
23 respostas
A
anderson.bonavides
Pessoal existe alguma alternativa para se resolver ProjectCycleException com maven?
Tenho um projeto que EJB na seguinte estrutura:
PAI
|EAR
| EJB_1
|__ EJB_2
|__ EJB_3
|__ EJB_N +1
|__ WEB
O grande problema é que todos os EJB’s se comunicam com com todos os EJB’s causando a mensagem de erro: The cycle consists of projects e por mais que eu tente compilar utilizando a opção NON-RECURSIVE é gerado um ProjectCycleException. Alguém tem uma idéia de como pode ser resolvido isto?
Boa tarde,
Para resolver o problema de ProjectCycleException vc deve rever as depedencias entre os projetos verificar se cada EJB tem sua responsabilidade bem definida.
Esse é o famoso problema do ovo e da galinha … o projeto inicia desta forma e depois você tem muitos problemas.
A
anderson.bonavides
tiozao_bp:
Boa tarde,
Para resolver o problema de ProjectCycleException vc deve rever as depedencias entre os projetos verificar se cada EJB tem sua responsabilidade bem definida.
Esse é o famoso problema do ovo e da galinha … o projeto inicia desta forma e depois você tem muitos problemas.
Ele não chega a criar o ear e por isso não chega a ter o application.xml
D
darklordkamui
anderson.bonavides:
tiozao_bp:
Boa tarde,
Para resolver o problema de ProjectCycleException vc deve rever as depedencias entre os projetos verificar se cada EJB tem sua responsabilidade bem definida.
Esse é o famoso problema do ovo e da galinha … o projeto inicia desta forma e depois você tem muitos problemas.
Ele não chega a criar o ear e por isso não chega a ter o application.xml
ta mais e o pom? como vc fez ele?
A
anderson.bonavides
Sim claro, sem um pom não era nem reconhecido o projeto maven.
Essa é a estrutura que vc ta querendo saber:
O projeto foi montado por um Archetype, agora o motivo da exceção é que os projetos entram em um ciclo de compilação e dependência e acaba gerando o ProjectCycleException.
T
tiozao_bp
O problema n estara no Pom pai e sim nos modulos onde
M1 - Depende de M2
M2 - Depende de M1
Entao quando isso ocorre ou vc funde os 2 modulos ou atribui funcionalidade dependente ao modulo com maior afinidade.
T
tiozao_bp
Se seus problema esta relacionado a estas dependencias ciclicas da uma olhada em http://structure101.com/.
É uma ferramenta muito legal e ainda tem um trial de 30 dias.
A
anderson.bonavides
tiozao_bp:
O problema n estara no Pom pai e sim nos modulos onde
M1 - Depende de M2
M2 - Depende de M1
Entao quando isso ocorre ou vc funde os 2 modulos ou atribui funcionalidade dependente ao modulo com maior afinidade.
Sim, isso mesmo tizão talvez não tenha sido claro na explicação mas foi exatamente isto que estou querendo falar. Vou dar uma olhada no projeto que vc falou.
Grato!
D
darklordkamui
anderson.bonavides:
tiozao_bp:
O problema n estara no Pom pai e sim nos modulos onde
M1 - Depende de M2
M2 - Depende de M1
Entao quando isso ocorre ou vc funde os 2 modulos ou atribui funcionalidade dependente ao modulo com maior afinidade.
Sim, isso mesmo tizão talvez não tenha sido claro na explicação mas foi exatamente isto que estou querendo falar. Vou dar uma olhada no projeto que vc falou.
Grato!
quando eu falo do pom… quero saber do pom do ear…
vc vai ter um POM pai… e dentro dele vai ter todos os outros filhos… vc criou um modulo pro ear? se criou quero ver como vc criou esse pom.xml do ear…
A
anderson.bonavides
Segue o POM do projeto EAR:
<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><artifactId>MODULO-EAR</artifactId><packaging>ear</packaging><parent><!-- INFORMAÇÕES DO PARENT --></parent><properties><project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding></properties><dependencies><dependency><groupId>GRUP_ID</groupId><artifactId>MODULO-WEB</artifactId><type>war</type></dependency><dependency><groupId>GRUP_ID</groupId><artifactId>EJB_1</artifactId><type>ejb</type></dependency><dependency><groupId>GRUP_ID</groupId><artifactId>EJB_2</artifactId><type>ejb</type></dependency><dependency><groupId>GRUP_ID</groupId><artifactId>EJB_3</artifactId><type>ejb</type></dependency></dependencies><build><finalName>NOME_PROJETO</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-ear-plugin</artifactId><version>2.6</version><configuration><version>5</version><defaultLibBundleDir>lib</defaultLibBundleDir><modules></modules></configuration></plugin><plugin><groupId>org.jboss.as.plugins</groupId><artifactId>jboss-as-maven-plugin</artifactId><configuration><skip>false</skip></configuration></plugin></plugins></build><profiles><profile><id>openshift</id><build><plugins><plugin><artifactId>maven-ear-plugin</artifactId><version>2.6</version><configuration><outputDirectory>deployments</outputDirectory></configuration></plugin></plugins></build></profile></profiles></project>
D
darklordkamui
anderson.bonavides:
Segue o POM do projeto EAR:
<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><artifactId>MODULO-EAR</artifactId><packaging>ear</packaging><parent><!-- INFORMAÇÕES DO PARENT --></parent><properties><project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding></properties><dependencies><dependency><groupId>GRUP_ID</groupId><artifactId>MODULO-WEB</artifactId><type>war</type></dependency><dependency><groupId>GRUP_ID</groupId><artifactId>EJB_1</artifactId><type>ejb</type></dependency><dependency><groupId>GRUP_ID</groupId><artifactId>EJB_2</artifactId><type>ejb</type></dependency><dependency><groupId>GRUP_ID</groupId><artifactId>EJB_3</artifactId><type>ejb</type></dependency></dependencies><build><finalName>NOME_PROJETO</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-ear-plugin</artifactId><version>2.6</version><configuration><version>5</version><defaultLibBundleDir>lib</defaultLibBundleDir><modules></modules></configuration></plugin><plugin><groupId>org.jboss.as.plugins</groupId><artifactId>jboss-as-maven-plugin</artifactId><configuration><skip>false</skip></configuration></plugin></plugins></build><profiles><profile><id>openshift</id><build><plugins><plugin><artifactId>maven-ear-plugin</artifactId><version>2.6</version><configuration><outputDirectory>deployments</outputDirectory></configuration></plugin></plugins></build></profile></profiles></project>
é isso que precisa ser feito para ser gerado o application.xml
A
anderson.bonavides
ele gera o application.xml, ele só não ta gerando por conta do problema ciclico de projetos EJBs que dependem um do outro. Estou com um projeto menor na mesma estrutura que gera o application.xml corretamente.
D
darklordkamui
vc ja identificou quem esta com esse relacionamento ciclico?
A
anderson.bonavides
Todos os EJB tem esse relacionamento ciclico, é um projeto web comum o qual estou transformando em um projeto maven.
D
darklordkamui
é complicado… bom se eu estivesse com esse problema criaria um novo modulo maven, e colocaria todos os dependentes comum lá… ou iria rever como esta fazendo e dependendo mover classes de um modulo para outro…
nao tem como mover algumas classes para outro modulo?
A
anderson.bonavides
Sim, as classes comuns estão em um projeto separado, mas o grande problema é que os EJBs acessam servidos dos outros EJBs. Uma possível solução seria um projeto único EJB e depois realizar alguma forma de cada pacote gerar o seu arquivo JAR separado.
D
darklordkamui
todos ejb se comunicam entre si? é essa situação? ou tem um certo ejb que todos precisam acessar?
A
anderson.bonavides
todos ejb se comunicam entre si? é essa situação? ou tem um certo ejb que todos precisam acessar?
Todos se comunicam entre si.
D
darklordkamui
todos ejb se comunicam entre si? é essa situação? ou tem um certo ejb que todos precisam acessar?
Todos se comunicam entre si.
tem um jeito… mas vc vai ter que migrar tudo para @remote… e criar um ear para cada ejb… pq local ta dificil uma solução facil…
vou perguntar a uns conhecidos o que eles recomendam…
A
anderson.bonavides
mas todos já são remote.
T
tiozao_bp
Se todos ejbs tem um relacionamento ciclico vc tem que fazer um refactory nos pacotes:
Onde M1 tem toda regra comum aos dois EJBs deixando os EJBs com as interfaces de servico.
é uma boa solução!
anderson.bonavides pq vc utiliza @Remote nos seus ejbs? sendo que eles estao no mesmo EAR? se o EJB 1 se comunica com um EJB 2 que estao no mesmo EAR vc tem que colocar @Local nessa comunicação… pois o acesso Remoto é mais lento que o local… e vc pode perder performace… vc coloca @Remote se ele tiver que se comunicar com algo fora de seu servidor…
da uma revisada nisto, vera que vai ter mais performace =D
A
anderson.bonavides
Consegui resolver o problema, basta fazer este passo a passo:
Window --> Preferences --> Java --> Compiler --> Building --> Build path problems, MUDE PARA: “Circular dependencies” para Warning.