Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从其他gradle模块导入类_Java_Scala_Intellij Idea_Gradle - Fatal编程技术网

Java 从其他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

我有一个由两个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"
    }
  }

}

问题是,我无法从“客户机”模块内部导入“核心”模块内部定义的任何类。然而,另一种方法很好。 这可能是因为我们提到
编译项目(':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')

}