2012-07-05 9 views
5

Ho un progetto multi-modulo che assomiglia a questo:Maven dice che ho un riferimento ciclico nel progetto multi-modulo, ma non riesco a capire il motivo per cui

  • module1
    • pom.xml
  • module2
    • pom.xml
  • pom.xml

Il pom.xml nel modulo2 ha una dipendenza dal modulo1.

Quando eseguo compilazione mvn pulita ottengo il seguente errore:

The projects in the reactor contain a cyclic reference.

Qui sono le mie dipendenze in Module1:

<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> 

io non riesco a capire il motivo per cui dice che c'è un ciclico riferimento. Anche quando faccio dipendenza mvn: albero su module1 ottengo il seguente:

[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 

Sembra a me come se non ci sono riferimenti a Module2 in module1. Quindi da dove viene il riferimento ciclico?

Edit: Ecco il registro con il debug on:

+ 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

È possibile pubblicare il registro pertinente in esecuzione in modalità di debug - 'mvn -X clean compile'? – Raghuram

+0

Ho appena aggiornato il post per includere il registro – user977208

risposta

9

Ah! È stato un errore fuorviante.

Il problema non era che entrambi modulo1 e modulo2 dipendevano l'uno dall'altro. Il problema era che module2 è un plugin Maven e nella mia radice pom.xml avevo il plugin nella sezione. Ho rimosso quel plugin dalla build e ha iniziato a funzionare.

1

Ho avuto esattamente lo stesso problema in un progetto multimodule all'orecchio. L'ejb pom aveva una dipendenza dal modulo web (scope compile) e dal web pom una dipendenza dal modulo ejb. Non appena ho rimosso la dipendenza pom di ejb sul modulo web, il progetto si è sviluppato bene. Ha senso che le dipendenze intramodule debbano essere unidirezionali dopotutto, al fine di evitare riferimenti ciclici.

2

Faccio quasi la stessa cosa, e uso IDEA.

Ho un progetto A, che dipende da un modulo B. Nel file pom di A, B è stato dichiarato come dipendenza. Questo va bene. Nel file pom di B, A è stato dichiarato come genitore. Ho rimosso queste informazioni e, come richiesto nel messaggio di errore, ho aggiunto il numero di versione di B nel suo file pom.

E ora è OK.

Problemi correlati