java - gradle 与外部项目的循环依赖

标签 java gradle

我有一个相当简单的设置,但不起作用,我无法找出原因:

文件夹结构如下:

/dependency
    /build.gradle
    /settings.gradle
    /src/main/...

/Mainproject
    /build.gradle
    /settings.gradle

    /Subproject_1
        /build.gradle
        /src/main...

     /Subproject_2
        /build.gradle
        /src/main...

我希望子项目依赖于本地的“依赖”来进行快速测试。 所以我按照手册做了:

/Mainproject/settings.gradle:

include "Subproject_1", "Subproject_2", "dependency"
project(":dependency").projectDir = file('../dependency')

/Mainproject/build.gradle:

allprojects {
    apply plugin: 'java'
    dependencies {
        compile project(path: ':dependency')
    }
}

dependencies {
    compile project(':Subproject_1')
    compile project(':Subproject_2')
}

/dependency/build.gradle:

version '1.0'
apply plugin: 'java'

repositories {
    maven {
        url "http://...."
    }
}

dependencies {
    compile group: 'commons-lang', name: 'commons-lang', version: '2.6'
    compile group: 'javax', name: 'javaee-api', version: '7.0'
}

jar {
    manifest {
        attributes 'Implementation-Title': 'Archive delegation dispatcher classes',
                'Implementation-Version': project.version
    }
}

Subproject_1和_2的build.gradle文件为空。 依赖的settings.gradle文件为空。

当我构建 MainProject 时,我得到:

Circular dependency between the following tasks:
:dependency:classes
\--- :dependency:compileJava
     \--- :dependency:jar
          \--- :dependency:classes (*)

(*) - details omitted (listed previously)

我无法理解为什么会这样。

有什么提示吗?

最佳答案

当您在主项目的settings.gradle 文件中包含“dependency”时,您就使“dependency”项目成为“Mainproject”的子项目。

然后主项目的 build.gradle 文件中的此 block 将“依赖项”定义为所有子项目的编译依赖项。

allProjects {
    dependencies {
        compile project(path: ':dependency')
    }
}

由于“依赖项”项目也是一个子项目,因此您定义了一个循环依赖项,其中“依赖项”项目依赖于其自身。

相反,尝试使用以下内容为每个子项目创建一个 settings.gradle 文件:

include "dependency"
project(":dependency").projectDir = file('../dependency')

然后修改 Mainproject 的 settings.gradle 文件,如下所示:

include "Subproject_1", "Subproject_2"

关于java - gradle 与外部项目的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36202064/

相关文章:

java - 访问 https ://www. googleapis.com/oauth2/v1/certs 时出现 404 错误

java - 为什么子类对象使用父类方法会导致错误?

gradle - 在不同项目之间共享配置的最佳方式是什么?

java - 重新加载由 getResourceAsStream 加载的资源

java - 使用 GSUtil 在本地加载文件

java - corrupted double-linked list error 第一次运行程序时,后续运行正常

netbeans - 从Gradle构建NetBeans Ant项目

java - 使用 Intellij 2017.2/out 目录构建会复制/build 目录中的文件

java - 与依赖冲突 : build. gradle

java - 如何使用 gradle 将类添加到类路径?