我有一个mutli模块gradle项目:
subprojects {
apply plugin: 'java-library'
}
project(':core') {
dependencies {
compile project(':module:mod-a')
}
}
project(':module:mod-a') {
dependencies {
compile project(':core')
}
}
project(':module:mod-b') {
dependencies {
compile project(':core')
}
}
当然这会导致循环编译依赖:
* What went wrong:
Circular dependency between the following tasks:
:core:compileJava
+--- :core:compileJava (*)
\--- :module:mod-a:compileJava
+--- :core:compileJava (*)
\--- :module:mod-a:compileJava (*)
令我困扰的是,即使我将compile
依赖项从:core
更改为:module:mod-a
到runtime
依赖项,仍然无法编译项目:< / p>
* What went wrong:
Circular dependency between the following tasks:
:module:mod-a:compileJava
\--- :module:mod-a:compileJava (*)
我不明白为什么会出现问题。 :core
仅在运行时需要该模块,因此可以先编译。之后,可以使用核心编译模块。此外,:core
不再是Gradle错误消息的一部分。所以Gradle似乎“看到”它只是一个运行时依赖。
问题在哪里以及如何解决?
答案 0 :(得分:0)
当你这样做时
dependencies {
runtime project(':xxx')
}
与
相同dependencies {
runtime project(path: ':xxx', configuration: 'default')
}
请参阅here,其中指出default
配置扩展runtime
。
通过这样做,您:module:mod-a
取决于runtime
中的:core
配置。因此,曲解的依赖
您可以引用archives
配置而不是default
来打破周期
例如:
subprojects {
apply plugin: 'java'
}
project(':core') {
artifacts {
archives jar
}
}
project(':module:mod-a') {
dependencies {
compile project(path: ':core', configuration: 'archives')
compile project(path: ':core', configuration: 'runtime')
}
}
答案 1 :(得分:0)
使用runtimeOnly
代替runtime
似乎可以解决问题。