[英]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
我的应用程序似乎无法正常工作。
这是因为您试图在自己内部包含一个模块。
来自:
dependencies {
implementation project(':shared')
...
}
至:
dependencies {
...
}
GL
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.