我有一个相当简单的设置,这不起作用,我无法解决原因:
文件夹结构如下:
/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)
我无法理解为什么会这样。
任何提示?
答案 0 :(得分:3)
当您在Mainproject的settings.gradle文件中include "dependency"
时,您正在将“依赖项”项目作为“Mainproject”的子项目。
然后,Mainproject的build.gradle文件中的这个块将“dependency”定义为所有子项目的编译依赖项。
allProjects {
dependencies {
compile project(path: ':dependency')
}
}
由于“依赖”项目也是一个子项目,因此您定义了一个循环依赖项,其中“依赖项”项目依赖于它自己。
相反,请尝试使用以下内容为每个子项目创建settings.gradle文件:
include "dependency"
project(":dependency").projectDir = file('../dependency')
然后将Mainproject的settings.gradle文件修改为:
include "Subproject_1", "Subproject_2"
答案 1 :(得分: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')
}
}
}
答案 2 :(得分:1)
因为依赖关系本身。 移动它必须没问题。
答案 3 :(得分:0)
关闭Instant run
对我有用,也可能对其他人有用。我做了一些与gradle
相关的更改,之后我的应用程序似乎无法正常工作。
答案 4 :(得分:0)
这是因为您试图在自己内部包含一个模块。
发件人:
dependencies {
implementation project(':shared')
...
}
收件人:
dependencies {
...
}
GL