当前位置: 首页 > 知识库问答 >
问题:

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

隆芷阳
2023-03-14

我有一个多模块项目,如下所示:

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

    模块 2 中的 pom.xml依赖于模块 1。

    当我运行mvn清洁编译时,我得到以下错误:

    Reactor中的项目包含循环参考。

    以下是我在模块1中的依赖项:

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

    我不明白为什么它说有循环引用。即使在模块1上执行mvn依赖:树时,我也会得到以下结果:

    [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
    

    在我看来,模块1中没有任何对模块2的引用。那么循环引用从何而来呢?

    编辑:以下是调试的日志

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

共有3个答案

徐正雅
2023-03-14

我做的几乎一样,我使用的是IDEA。

我有一个项目A,它依赖于模块B。在 A 的 pom 文件中,B 被声明为依赖项。这没关系。在 B 的 pom 文件中,A 被声明为其父级。我删除了此信息,并且由于错误消息中请求它,我在其pom文件中添加了B的版本号。

现在没问题了。

楚嘉胜
2023-03-14

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

module_rootpom.xml指定module_child_X2次:

- 作为一个模块

(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。它已被指定为模块。

子车俊材
2023-03-14

啊!这是一个误导性的错误。

问题不在于模块1和模块2都相互依赖。问题是module2是一个Maven插件,在我的根pom中.xml我在本节中有插件。我从构建中删除了该插件,它开始工作。

 类似资料:
  • /tester.java:3:错误:import java.lang.Math类型的非法启动;^Tester.java:3:错误:应输入java.lang.Math>*;^

  • 我曾广泛使用过Maven 目前有5个不同的maven项目,每个项目都有一个不同的pom.xml。到目前为止,它们之间存在依赖关系,如果需要,每一个都指向 中的另一个。 现在我们不喜欢的是 当我们发布子projectA时,我们需要手动修改所有将projectA作为依赖项的项目以使用新版本。Saw Maven有一个版本插件,不知道这会有什么帮助。 作为解决方案,我希望在POM之间有一个更干净的组织,并

  • 我正在努力练习techniqual测试,我必须计算DNA序列中的字符数,但无论我做什么,计数器都不会更新,这真的很令人沮丧,因为我用ruby学习代码,它会更新,但Java似乎有一个问题。我知道我的语法有问题,但是我怎么也想不出来。 如果满足条件并重新分配值,它只会一直返回零,而不是加一。

  • 反应器中的项目包含循环引用:Vertex{tag='org.spigotmc: spiget-api: 1.8.8-R0.1-SNAPSHOT'}'和'Vertex{tag='org.spigotmc: spigot: 1.8.8-R0.1-SNAPSHOT'}'之间的边缘在图中引入循环org.spigotmc: spigot: 1.8.8-R0.1-SNAPSHOT- “Vertex { lab

  • 我有一个简单的Maven项目,看起来像这个项目视图 有一个主要的pom。xml如下所示: 有两个模块-核心和测试。核心模块pom.xml: 测试模块pom。xml 我想使用核心内部测试的代码。这种依赖性看起来是正确的。该项目已生成,没有错误: 但是,当我在测试中尝试从core导入一个类时,找不到该类。

  • 我有一个多模块maven应用程序,我们需要通过Jenkins构建。项目结构如下: 现在,mvn清洁安装-fa.xml工作正常。为此,我创建了一个詹金斯的工作。现在,和a.xml一样,我有另一个项目b.xml.b.xml有和a.xml相同的代码,除了不同的Ids。所以,我又为詹金斯创造了一份工作b.xml.两份工作都很好。但是,现在我想根据我们在Git中提交的项目,从单个Jenkins工作中构建这两