2012-07-05 23 views
5

tôi có một dự án đa mô-đun đó trông như thế này:Maven nói rằng tôi có một tham chiếu tuần hoàn trong dự án đa mô-đun nhưng không thể tìm ra lý do tại sao

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

Pom.xml trong mô-đun 2 có phụ thuộc vào mô-đun1.

Khi tôi chạy biên dịch mvn clean tôi nhận được lỗi sau:

The projects in the reactor contain a cyclic reference.

Dưới đây là phụ thuộc của tôi trong 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> 

tôi không thể tìm ra lý do tại sao nó nói có một chu kỳ tài liệu tham khảo. Ngay cả khi tôi làm phụ thuộc mvn: cây trên module1 tôi nhận được như sau:

[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 

Có vẻ với tôi như không có bất kỳ tài liệu tham khảo để module2 trong module1. Vậy tham chiếu cyclic đến từ đâu?

Edit: Đây là nhật ký với debug trên:

+ 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

Bạn có thể đăng nhật ký có liên quan đang chạy trong chế độ gỡ lỗi - 'mvn -X biên dịch sạch' không? – Raghuram

+0

Tôi vừa cập nhật bài đăng để bao gồm nhật ký – user977208

Trả lời

9

Ah! Đó là một lỗi gây hiểu lầm.

Vấn đề không phải là cả hai module1 và module2 đều phụ thuộc vào nhau. Vấn đề là module2 là một plugin Maven và trong pom.xml gốc của tôi, tôi đã có plugin trong phần này. Tôi đã xóa plugin đó khỏi bản dựng và nó bắt đầu hoạt động.

1

Tôi đã có chính xác cùng một vấn đề trong một dự án tai đa mô-đun. Ejb pom có ​​sự phụ thuộc vào mô đun web (phạm vi biên dịch) và pom web phụ thuộc vào mô-đun ejb. Ngay sau khi tôi loại bỏ sự phụ thuộc pom của ejb trên mô-đun web, dự án xây dựng tốt. Có nghĩa là các phụ thuộc intramodule phải là một chiều sau khi tất cả, để tránh các tham chiếu tuần hoàn.

2

Tôi gần như giống nhau và tôi sử dụng IDEA.

Tôi có dự án A, phụ thuộc vào mô-đun B. Trong tệp pom của A, B được khai báo là phụ thuộc. Điều này là OK. Trong tệp pom của B, A được khai báo là cha mẹ của nó. Tôi đã xóa thông tin này và khi được yêu cầu trong thông báo lỗi, tôi đã thêm số phiên bản B vào tệp pom của nó.

Và bây giờ nó là OK.