繁体   English   中英

gradle 循环依赖与外部项目

[英]gradle circular dependency with external project

我有一个相当简单的设置,但不起作用,我不知道为什么:

文件夹结构如下:

/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文件为空。

当我 gradle build MainProject 时,我得到:

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

(*) - details omitted (listed previously)

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

任何提示?

当您在 Mainproject 的 settings.gradle 文件中include "dependency" ,您将使“dependency”项目成为“Mainproject”的子项目。

然后你的 Mainproject 的 build.gradle 文件中的这个块将“依赖”定义为所有子项目的编译依赖。

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

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

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

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

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

include "Subproject_1", "Subproject_2"

您已经声明allProjects依赖于项目dependency如下所示:

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

您只需要将其应用于您的不是dependency项目。 您可以通过在应用依赖项时排除它来做到这一点,就像这样

subprojects { project ->
    if (project.name != "dependency") {
        apply plugin: 'java'
        dependencies {
            compile project(path: ':dependency')
        }
    }
}

因为依赖本身。 动起来一定没问题。

关闭Instant run对我有用,对其他人也有用。 我有一些与gradle相关的更改, gradle我的应用程序似乎无法正常工作。

build.gradle (:shared)

这是因为您试图在自己内部包含一个模块。

来自:

dependencies {
    implementation project(':shared')
    ...
}

至:

dependencies {
    ...
}

GL

来源

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM