从不同的gradle模块导入类

时间:2017-09-07 01:30:32

标签: 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 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然后理所当然地声称这两个模块之间存在循环构建依赖关系。

总结一下,如何在核心'内部'客户'不要将它们作为彼此的编译依赖关系。

1 个答案:

答案 0 :(得分:2)

  

我们提到compile project(':clients')作为'core'模块

的依赖项

你为什么需要这个?如果你这样做,那么就不能在core中使用clients中的类,因为要编译它们,你需要先编译clients,但要编译clients你需要类来自core

如果您只需要clientscore的某些特定类,则可以将它们移动到clientcore都依赖的第三个模块中。或者对core中所需的clients类进行相同的操作。

如果特定类之间存在循环依赖关系(例如A中的core类需要从B导入clients,则需要导入A再次;循环可能包含2个以上的类),然后它们必须在一个模块中。