从其他Gradle模块导入类



我有一个项目,该项目由两个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的类,等等。

如果您仅需要coreclients的某些特定类,则可以将它们移入clientcore依赖的第三个模块中。或对core中的CC_14的类进行相同的操作。

如果特定类之间具有环状依赖性(例如,core的类A需要从clients导入B,需要再次导入A;该循环可能包括两个以上的类),那么它们必须在一个模块中。

最新更新