2012-07-05 15 views
5

Ich habe ein Multi-Modul-Projekt, das wie folgt aussieht:Maven sagt, dass ich in Multi-Modul-Projekt eine zyklische Referenz haben, kann aber nicht herausfinden, warum

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

Die Datei pom.xml in module2 hat eine Abhängigkeit von module1.

Wenn ich laufen mvn sauber Kompilierung ich die folgende Fehlermeldung erhalten:

The projects in the reactor contain a cyclic reference.

Hier meine Abhängigkeiten in module1 sind:

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

ich kann nicht herausfinden, warum es sagt, es ist ein zyklisches Referenz. Selbst wenn ich mvn Abhängigkeit tun: Baum auf module1 erhalte ich folgendes:

[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 

Es sieht für mich wie es keine Referenzen sind in module1 Module2. Woher kommt die zyklische Referenz?

Edit: Hier ist das Protokoll mit 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

Können Sie relevante Protokolle im Debug-Modus - 'mvn -X clean kompilieren'? – Raghuram

+0

Ich habe gerade den Beitrag aktualisiert, um das Protokoll aufzunehmen – user977208

Antwort

9

Ah! Es war ein irreführender Fehler.

Das Problem war nicht, dass dort Modul1 und Modul2 voneinander abhingen. Das Problem war, dass module2 ein Maven Plugin ist und in meinem root pom.xml hatte ich das Plugin in der Sektion. Ich habe das Plugin aus dem Build entfernt und es hat angefangen zu arbeiten.

1

Ich hatte genau das gleiche Problem in einem Multimodul Ohr Projekt. Der ejb-pom hatte eine Abhängigkeit vom Web-Modul (Compile-Umfang) und der Web-Pom eine Abhängigkeit vom ejb-Modul. Sobald ich die Pom-Abhängigkeit des ejb vom Web-Modul entfernt habe, ist das Projekt in Ordnung. Es macht Sinn, dass die Abhängigkeiten zwischen den Modulen doch unidirektional sein müssen, um zyklische Referenzen zu vermeiden.

2

Ich mache fast das gleiche, und ich verwende IDEA.

Ich habe ein Projekt A, das von einem Modul B abhängt. In der Pom-Datei von A wurde B als Abhängigkeit deklariert. Das ist in Ordnung. In der Pom-Datei von B wurde A als Elternteil deklariert. Ich habe diese Information entfernt, und wie es in der Fehlermeldung angefordert wurde, fügte ich die Versionsnummer von B in seiner Pom-Datei hinzu.

Und jetzt ist es OK.