build.gradle.kts&;多模块项目:如何添加其他项目以使可传递的依赖项也可用
具有以下多模块设置:build.gradle.kts&;多模块项目:如何添加其他项目以使可传递的依赖项也可用,gradle,gradle-kotlin-dsl,Gradle,Gradle Kotlin Dsl,具有以下多模块设置: multi ├── projA │ └── build.gradle.kts ├── projB │ └── build.gradle.kts ├── build.gradle.kts └── settings.gradle.kts 包含以下内容(缩写): settings.gradle.kts rootProject.name = "multi" include("projA", "projB") dependencies { implementat
multi
├── projA
│ └── build.gradle.kts
├── projB
│ └── build.gradle.kts
├── build.gradle.kts
└── settings.gradle.kts
包含以下内容(缩写):
settings.gradle.kts
rootProject.name = "multi" include("projA", "projB")
dependencies { implementation("important-library:1.0") }
dependencies { implementation(project(":projA")) }
projA\build.gradle.kts
rootProject.name = "multi" include("projA", "projB")
dependencies { implementation("important-library:1.0") }
dependencies { implementation(project(":projA")) }
projB\build.gradle.kts
rootProject.name = "multi" include("projA", "projB")
dependencies { implementation("important-library:1.0") }
dependencies { implementation(project(":projA")) }
projB
访问该重要库:1.0
工作原理:如果我在projA
中有一个使用该库的类,那么即使该类是从projB
中的类调用的,它也可以完美地工作(因此间接访问是有效的)。直接从projB
中的importantlibrary:1.0
访问任何类都不起作用(未解析的引用)
我错过了什么?或者需要设置什么才能使其工作
Gradle版本:5.6.1我发现很多资料都提到了
配置
来处理可传递依赖关系。深入挖掘,我发现默认配置应该使运行时
、仅运行时
和实现
可用于引用项目
要么我在这里误解了“default”,要么你真的需要使用“default”
-配置显式地调用它。在projB
中声明依赖项如下,使得projA
中的依赖项也可用于projB
:
implementation(project(":projA", "default"))
// or with named parameters:
implementation(project(path = ":projA", configuration = "default"))
想知道这是否是/确实是有意的,或者这是否是
项目
-函数的配置
-参数的一个不幸的默认值。我认为实现您想要的功能的一个好方法是使用api
而不是实现
<代码>实现意味着仅将依赖项保留在模块内部,而api
意味着将它们与模块一起导出。projA
的依赖关系将变成:
dependencies {
api("important-library:1.0")
}
这是官方文档的链接:有两个主题:依赖项的传递性和作为依赖项的
/src
- 依赖传递性
api
,以便将依赖项导出到更高层次的模块中
build.gradle.kts(:library\u base)
build.gradle.kts(:common)
- /src作为依赖项的传递性
“default”
作为配置传递,以便能够从较低的模块层次结构导入/src
build.gradle.kts(:feature_a)
为了能够从:feature_a
访问/src
,例如:domain
,我们使用“default”
作为配置,并且能够访问:library\u base
的依赖项,我们确保在该模块中使用api
定义它们,以便可以导出它们
德国劳埃德船级社
你能再详细说明一下吗?我的意思是,这当然适用于讨论中的类,但下一步将是构建一个胖罐子。。。然后应该包括哪些依赖项,哪些不应该?你将如何解决这个问题?来自Maven,我认为
compile
可以用implementation
替换,而可以用api
替换。。。而且它几乎成功了。。。configuration=“default”
解决了上一个问题,现在它的工作方式似乎与Maven中的工作方式类似……但是,如果我的假设是错误的,那么我洗耳恭听,它实际上应该是什么样的,以及我将如何解决类似于胖罐子的问题……似乎我的假设是不正确的。。。需要更多研究:-)将清理一些评论。。。