2012-07-05 86 views
5

Tengo un proyecto de varios módulos que se ve así:Maven dice que tengo una referencia cíclica en el proyecto de varios módulos, pero no puedo entender por qué

  • modulo1
    • pom.xml
  • modulo2
    • pom.xml
  • pom.xml

El pom.xml en el módulo2 tiene una dependencia en el módulo1.

Cuando corro de compilación mvn limpia me sale el siguiente error:

The projects in the reactor contain a cyclic reference.

Éstos son mis dependencias en el módulo 1:

<dependencies> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.14</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.6.1</version> 
    </dependency> 
    <dependency> 
     <groupId>com.jcraft</groupId> 
     <artifactId>jsch</artifactId> 
     <version>0.1.48</version> 
    </dependency> 
</dependencies> 

no puedo entender por qué se dice que hay una cíclico referencia. Incluso cuando lo haga la dependencia mvn: árbol en el módulo 1 me sale el siguiente:

[INFO] +- log4j:log4j:jar:1.2.14:compile 
[INFO] +- org.slf4j:slf4j-log4j12:jar:1.6.1:compile 
[INFO] | \- org.slf4j:slf4j-api:jar:1.6.1:compile 
[INFO] +- com.jcraft:jsch:jar:0.1.48:compile 
[INFO] \- junit:junit:jar:4.8.2:test 

A mi me parece como que no hay ninguna referencia a Module2 en el módulo 1. Entonces, ¿de dónde viene la referencia cíclica?

Editar: Aquí está el registro con depuración en:

+ Error stacktraces are turned on. 
Apache Maven 2.2.1 (r801777; 2009-08-06 15:16:01-0400) 
Java version: 1.6.0_31 
Default locale: en_US, platform encoding: Cp1252 
OS name: "windows 7" version: "6.1" arch: "amd64" Family: "windows" 
[INFO] Scanning for projects... 
[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] The projects in the reactor contain a cyclic reference: Edge between 'Vertex{label='com.myorg:module2'}' and 'Vertex{label='com.myorg:module1'}' introduces to cycle in the graph com.myorg:module1 --> com.myorg:module2 --> com.myorg:module1 
[INFO] ------------------------------------------------------------------------ 
[DEBUG] Trace 
org.apache.maven.BuildFailureException: The projects in the reactor contain a cyclic reference: Edge between 'Vertex{label='com.myorg:module2'}' and 'Vertex{label='com.myorg:module1'}' introduces to cycle in the graph com.myorg:module1 --> com.myorg:module2 --> com.myorg:module1 
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='com.myorg:module2'}' and 'Vertex{label='com.myorg:module1'}' introduces to cycle in the graph com.myorg:module1 --> com.myorg:module2 --> com.myorg:module1 
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.<init>(ProjectSorter.java:118) 
at org.apache.maven.execution.ReactorManager.<init>(ReactorManager.java:99) 
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:288) 
... 11 more 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: < 1 second 
[INFO] Finished at: Thu Jul 05 17:21:21 EDT 2012  
[INFO] Final Memory: 3M/244M 
[INFO] ------------------------------------------------------------------------ 
+0

¿Se puede publicar el registro relevante que se ejecuta en modo de depuración - 'mvn -X clean compile'? – Raghuram

+0

Acabo de actualizar la publicación para incluir el registro – user977208

Respuesta

9

Ah! Fue un error engañoso.

El problema no era que tanto el módulo1 como el módulo2 dependieran entre sí. El problema era que module2 es un plugin de Maven y en mi raíz pom.xml tenía el plugin en la sección. Eliminé ese complemento de la compilación y comenzó a funcionar.

1

Tuve exactamente el mismo problema en un proyecto de oído multimodular. El ejb pom tenía una dependencia en el módulo web (compilar el alcance) y la web pom una dependencia en el módulo ejb. Tan pronto como eliminé la dependencia de pom del ejb en el módulo web, el proyecto se construyó bien. Tiene sentido que las dependencias intramódulo deben ser unidireccionales después de todo, para evitar referencias cíclicas.

2

Hago casi lo mismo, y uso IDEA.

Tengo un proyecto A, que depende de un módulo B. En el archivo pom de A, B se declaró como una dependencia. Esto esta bien. En el archivo pom de B, A se declaró como su principal. Eliminé esta información, y como se solicitó en el mensaje de error, agregué el número de versión de B en su archivo pom.

Y ahora está bien.

Cuestiones relacionadas