我有一个项目,该项目由两个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)随后正确地声称这两个模块之间存在环状构建依赖关系。
总结一下,如何在"核心"内部的"客户端"中进行类,而无需将它们作为彼此的编译依赖项。
我们提到
compile project(':clients')
是'core'
模块的依赖性
为什么需要这个?如果这样做,则不能使用clients
中的core
类,因为要编译它们,您需要首先编译clients
,但是要编译clients
,您需要core
的类,等等。
如果您仅需要core
中clients
的某些特定类,则可以将它们移入client
和core
依赖的第三个模块中。或对core
中的CC_14的类进行相同的操作。
如果特定类之间具有环状依赖性(例如,core
的类A
需要从clients
导入B
,需要再次导入A
;该循环可能包括两个以上的类),那么它们必须在一个模块中。