Java 从其他gradle模块导入类
我有一个由两个gradle项目组成的项目,在build.gradle文件中定义如下Java 从其他gradle模块导入类,java,scala,intellij-idea,gradle,Java,Scala,Intellij Idea,Gradle,我有一个由两个gradle项目组成的项目,在build.gradle文件中定义如下 project(':clients') { archivesBaseName = "clients" dependencies { compile libs.lz4 compile libs.snappy compile libs.slf4jApi testRuntime libs.slf4jlog4j } jar { dependsOn crea
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"
}
}
}
及
问题是,我无法从“客户机”模块内部导入“核心”模块内部定义的任何类。然而,另一种方法很好。
这可能是因为我们提到编译项目(':clients')
作为“核心”模块的依赖项。当我将编译项目(':core')
作为“客户机”模块的依赖项时,IntelliJ允许我将类从“核心”模块导入“客户机”。然而,gradle正确地宣称这两个模块之间存在循环构建依赖关系
总之,如何使“核心”中的类在“客户机”中可访问,而不将它们作为彼此的编译依赖项
我们提到编译项目(':clients')
作为'core'
模块的依赖项
你为什么需要这个?如果您这样做,那么您就不能在客户机
中使用核心
中的类,因为要编译它们,您需要先编译客户机
,但要编译客户机
您需要核心
中的类,等等
如果您只需要core
中的clients
中的一些特定类,则可以将它们移动到第三个模块中,client
和core
都依赖于该模块。或者对客户机中所需的核心
中的类执行相同的操作
如果特定类之间存在循环依赖关系(例如,来自核心的类a
需要从客户端导入B
,这需要再次导入a
;循环可能包括两个以上的类),那么它们必须在单个模块中。您是否定义了设置.gradle
文件?基本上,它应该可以工作。使客户机
成为核心
的子项目@Opal我确实有一个设置.gradle
文件,但它只是说包含“核心”、“客户机”
那么你是说不改变项目结构就无法解决这个问题吗?不,没有(除非我误解了您的需要)。根据您的具体需求,另一件可能有帮助的事情不是直接在客户机中引用核心
中的类,而是在客户机
中定义接口,并使核心
类实现这些接口。
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')
}