Maven 说我在多模块项目中有一个循环引用,但不知道为什么

标签 maven multi-module cyclic-reference

我有一个看起来像这样的多模块项目:

  • 模块1
  • pom.xml
  • 模块2
  • pom.xml
  • pom.xml

  • module2 中的 pom.xml 依赖于 module1。

    当我运行 mvn clean compile 时,出现以下错误:

    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>
    

    我不明白为什么它说有一个循环引用。即使我在 module1 上执行 mvn dependency:tree 我得到以下信息:
    [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] ------------------------------------------------------------------------
    

    最佳答案

    在这种情况下发生在我身上。

    module_child_X 在 module_root pom.xml 中指定了 2 次:

    - 作为一个模块

    (pom.xml of the root module)
    <dependency>
        <groupId>module_root</groupId>
        <artifactId>module_child_X</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>jar</type>
    </dependency>
    


    - 作为依赖

    (pom.xml of the root module)
    <modules>
        <module>module_child_X</module>
        ...
    </modules>
    


    解决方案?

    删除了 module_child_X 作为依赖项。它已经被指定为一个模块。

    关于Maven 说我在多模块项目中有一个循环引用,但不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11349354/

    相关文章:

    c++ - 试图解决我的双端队列类和树类之间的循环引用错误

    java - Maven - 将远程存储库也用作本地存储库

    java - 无法解决heroku中项目的依赖关系

    需要显式排序的 Maven 多模块构建

    java - 如何从具有循环关系的数据集中形成一棵树?

    c++ - 由于具有循环引用的类中的 unique_ptr 或 vector 而导致核心转储

    java - maven项目无法启动tomcat

    java - 使用依赖注入(inject)的 AspectJ 类的类构造函数中出现 NoAspectBoundException 错误

    eclipse - 多模块 m2eclipse/WTP 项目能否将实用程序模块部署到 WEB-INF/类中?

    java - Spring Boot api、接口(interface)和实现的独立模块