我有一个项目,包含两个gradle项目,这些项目在build.gradle文件中定义如下。
project(':clients') {
archivesBaseName = "clients"
dependencies {
compile libs.lz4
compile libs.snappy
compile libs.slf4jApi
testRuntime libs.slf4jlog4j
}
jar {
dependsOn createVersionFile
from("$buildDir") {
include "proj/$buildVersionFileName"
}
}
}
和
project(':core') {
apply plugin: 'scala'
apply plugin: "org.scoverage"
archivesBaseName = "proj_${versions.baseScala}"
dependencies {
compile project(':clients')
compile libs.joptSimple
compile libs.metrics
compile libs.scala
compile libs.slf4jlog4j
compile libs.zkclient
compile libs.zookeeper
compile libs.scalaParserCombinators
}
tasks.create(name: "copyDependantLibs", type: Copy) {
from (configurations.testRuntime) {
include('slf4j-log4j12*')
}
from (configurations.runtime) {
exclude('kafka-clients*')
}
into "$buildDir/dependant-libs-${versions.scala}"
duplicatesStrategy 'exclude'
}
jar {
dependsOn('copyDependantLibs')
}
tasks.create(name: "copyDependantTestLibs", type: Copy) {
from (configurations.testRuntime) {
include('*.jar')
}
into "$buildDir/dependant-testlibs"
duplicatesStrategy 'exclude'
}
systemTestLibs.dependsOn('jar', 'testJar', 'copyDependantTestLibs')
}
问题在于我无法导入在核心内部定义的任何类别。来自'客户'内部的模块模块。但是,反过来工作正常。
这可能是因为我们提到compile project(':clients')
作为'核心'的依赖。模块。当我将compile project(':core')
作为对客户'的依赖时。模块,IntelliJ允许我从核心'导入类。模块进入'客户'。但是,gradle然后理所当然地声称这两个模块之间存在循环构建依赖关系。
总结一下,如何在核心'内部'客户'不要将它们作为彼此的编译依赖关系。
答案 0 :(得分:2)
我们提到
的依赖项compile project(':clients')
作为'core'
模块
你为什么需要这个?如果你这样做,那么就不能在core
中使用clients
中的类,因为要编译它们,你需要先编译clients
,但要编译clients
你需要类来自core
等
如果您只需要clients
中core
的某些特定类,则可以将它们移动到client
和core
都依赖的第三个模块中。或者对core
中所需的clients
类进行相同的操作。
如果特定类之间存在循环依赖关系(例如A
中的core
类需要从B
导入clients
,则需要导入A
再次;循环可能包含2个以上的类),然后它们必须在一个模块中。