2012-07-05 17 views
5

मैं एक बहु-मॉड्यूल परियोजना है कि इस तरह दिखता है:Maven कहता है कि मैं बहु मॉड्यूल परियोजना में एक चक्रीय संदर्भ है, लेकिन समझ नहीं क्यों

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

मॉड्यूल 2 में pom.xml मॉड्यूल 1 पर निर्भरता है।

जब मैं mvn साफ संकलन मैं निम्नलिखित त्रुटि मिलती है चलाएँ:

The projects in the reactor contain a cyclic reference.

यहाँ 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> 

मैं समझ नहीं क्यों यह कहते है एक चक्रीय संदर्भ। यहां तक ​​कि जब मैं mvn निर्भरता कार्य करें: module1 पर पेड़ मैं निम्नलिखित मिल:

[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 

यह मेरे लिए लगता है कोई भी संदर्भ module1 में module2 नहीं कर रहे हैं की तरह। तो चक्रीय संदर्भ कहां से आ रहा है?

संपादित करें:

+ 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

क्या आप डीबग मोड में चल रहे प्रासंगिक लॉग को पोस्ट कर सकते हैं - 'mvn -X क्लीन संकलन'? – Raghuram

+0

मैंने अभी लॉग को शामिल करने के लिए पोस्ट को अपडेट किया है – user977208

उत्तर

9

आह: यहाँ पर डिबग साथ लॉग है! यह एक भ्रामक त्रुटि थी।

समस्या यह नहीं थी कि मॉड्यूल 1 और मॉड्यूल 2 दोनों एक दूसरे पर निर्भर थे। समस्या यह थी कि मॉड्यूल 2 एक मेवेन प्लगइन है और मेरी रूट pom.xml में मेरे पास अनुभाग में प्लगइन था। मैंने उस प्लगइन को निर्माण से हटा दिया और यह काम करना शुरू कर दिया।

1

मेरे पास एक बहुआयामी कान प्रोजेक्ट में बिल्कुल वही समस्या थी। ईजेबी पोम ने वेब मॉड्यूल (संकलन गुंजाइश) पर निर्भरता और वेब पोम ईजेबी मॉड्यूल पर निर्भरता थी। जैसे ही मैंने वेब मॉड्यूल पर ईजेबी की पोम निर्भरता को हटा दिया, प्रोजेक्ट ठीक बना। यह समझ में आता है कि चक्रीय संदर्भों से बचने के लिए इंट्रामोड्यूल निर्भरता सभी के बाद एकजुट होनी चाहिए।

2

मैं लगभग वही करता हूं, और मैं आईडीईए का उपयोग करता हूं।

मेरे पास एक प्रोजेक्ट ए है, जो मॉड्यूल बी पर निर्भर करता है। ए की पीओएम फ़ाइल में बी को निर्भरता के रूप में घोषित किया गया था। यह ठीक है। बी की पोम फ़ाइल में, ए को इसके माता-पिता के रूप में घोषित किया गया था। मैंने इस जानकारी को हटा दिया, और जैसा कि त्रुटि संदेश में अनुरोध किया गया था, मैंने अपनी पोम फ़ाइल में बी का संस्करण संख्या जोड़ा।

और अब यह ठीक है।