我有一个由两个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')
}
问题是,我不能从客户端模块中导入任何在核心模块中定义的类。然而,反过来也行。这可能是因为我们提到了编译项目(:客户端)作为“核心”模块的依赖项。当我把编译项目(: core)作为客户端模块的依赖项时,IntelliJ允许我将核心模块中的类导入客户端。然而,gradle随后正确地声称这两个模块之间存在循环构建依赖关系。
总之,如何使“核心”中的类在“客户机”中可访问,而不将它们作为彼此的编译依赖项。
我们提到编译项目(':clients')
作为'core'
模块的依赖项
你为什么需要这个?如果您这样做,那么您就不能在客户机
中使用核心
中的类,因为要编译它们,您需要先编译客户机
,但要编译客户机
您需要核心
中的类,等等。
如果您只需要core
中的clients
中的一些特定类,则可以将它们移动到第三个模块中,client
和core
都依赖于该模块。或者对客户机中所需的
核心
中的类执行相同的操作。
如果特定类之间存在循环依赖关系(例如,来自
核心
的类
a
需要从客户端导入
B
,需要再次导入a
;循环可能包含两个以上的类),则它们必须位于单个模块中。
我已经将volley库克隆为 我如何将其作为模块导入到我的android studio项目中,该项目由gradle提供支持,类似于IntelliJ Idea中的“导入模块”选项。
问题内容: 我有一个使用内置模块的Python脚本,但也导入了与主脚本本身位于同一目录中的许多自定义模块。 例如,我会打电话 和agent.py具有许多导入,包括: 其中checks与agent.py位于同一目录中的文件 当前工作目录为agent /时,一切都很好。但是,如果我从任何其他目录调用agent.py,则显然无法导入checks.py等错误。 我如何确保可以导入自定义模块,而不管从哪里调
我的项目有以下结构: 以下是的部分内容:
问题 你想给某个已存在模块中的函数添加装饰器。 不过,前提是这个模块已经被导入并且被使用过。 解决方案 这里问题的本质就是你想在模块被加载时执行某个动作。 可能是你想在一个模块被加载时触发某个回调函数来通知你。 这个问题可以使用10.11小节中同样的导入钩子机制来实现。下面是一个可能的方案: # postimport.py import importlib import sys from coll
我是一个(普通的)Gradle多项目构建,我有一个根,有四个子项目。每个都有自己的版本。gradle和普通版本。gradle,设置。格雷德尔和格雷德尔。根文件夹中的属性。 这一切都像预期的那样构建了一个作品——除了一件事我不明白: 将gradle构建导入IntelliJ时(从外部模型导入)IntelliJ在根级别创建两个单独的模块。一个标记为普通模块,一个标记为分组模块。让我惊讶的是后者——为什么
问题内容: 我已尝试找到有关最佳使用还是全面的指南。我刚开始使用Python,并且正在尝试着眼于最佳实践。 基本上,我希望有人能分享他们的经验,其他开发人员有什么喜好,以及避免遇到麻烦的最佳方法是什么? 问题答案: 和之间的区别主要是主观的。选择最喜欢的一个,并在使用中保持一致。这里有一些要点可以帮助你做出决定。 优点: - 减少维护你的import报表。无需添加任何其他导入即可开始使用模块中的另