Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.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 需要了解buildSrc Gradle项目中的Kotlin代码_Java_Kotlin_Gradle - Fatal编程技术网

Java 需要了解buildSrc Gradle项目中的Kotlin代码

Java 需要了解buildSrc Gradle项目中的Kotlin代码,java,kotlin,gradle,Java,Kotlin,Gradle,我是Kotlin的新手,目前正在学习如何将Gradle与Kotlin集成。在互联网上我看到了这个代码 import org.gradle.api.Project 导入org.gradle.kotlin.dsl* /** *通过添加Kotlin`stdlib`作为依赖项,将当前项目配置为Kotlin项目。 */ 有趣的项目{ 依赖关系{ “编译”(kotlin(“stdlib”)) } } 这将另存为buildSrc/src/main/kotlin/Dependencies.kt。因为Kotli

我是Kotlin的新手,目前正在学习如何将Gradle与Kotlin集成。在互联网上我看到了这个代码

import org.gradle.api.Project
导入org.gradle.kotlin.dsl*
/**
*通过添加Kotlin`stdlib`作为依赖项,将当前项目配置为Kotlin项目。
*/
有趣的项目{
依赖关系{
“编译”(kotlin(“stdlib”))
}
}
这将另存为buildSrc/src/main/kotlin/Dependencies.kt。因为Kotlin有太多的语法糖分,我在理解这段代码时有点困难。
“compile”(
部分,即
调用()
约定?有人能解释一下这段代码和Gradle buildSrc,以及为什么代码看起来像这样吗

这是buildSrc/build.gradle.kts文件

插件{
`科特林dsl`
}
存储库{
jcenter()
}
下面是根目录中的另一个build.gradle.kts

插件{
基础
kotlin(“jvm”)版本“1.3.72”应用错误
}
所有项目{
group=“com.example.test”
version=“1.0”
存储库{
jcenter()
}
}
依赖关系{
//使根项目存档配置依赖于每个子项目
//子项目.forEach{
//档案(it)
//    }
}```

是的,它们实际上是操作员调用。当您对字符串执行
()
操作时,kotlin将调用该上下文中定义的
操作符fun string.invoke()

例子胜过文字:

//顶级上下文
运算符fun String.invoke(a:String,b:Int,c:()->Unit){
println(本)
println(a)
println(b)
c()
}
//这样说吧
“测试”(“参数a”,27){println(“参数c”)}
//结果:
//试验
//参数a
// 27
//参数c
下面是代码,它执行相同的操作,但是在接收器内部,也就是说,它调用类内部定义的调用函数,而不是顶级函数


还有更多来自kotlin文档的示例,您可以从阅读开始

特别是,它链接到并说,
org.gradle.kotlin.dsl.*
org.gradle.kotlin.dsl.plugins.dsl.*
是自动导入的(因此,
import
行可能会被删除)。查看它们,我们确实可以找到
invoke
操作符。这一个在
依赖项{…}
中,因此我们可以查看:

operator fun String.invoke(dependencyNotation:Any):依赖关系?
运算符fun String.invoke(dependencyNotation:String,dependencyConfiguration:ExternalModuleDependence.(->单位):ExternalModuleDependence
运算符fun String.invoke(组:String,名称:String,版本:String?=null,配置:String?=null,分类器:String?=null,ext:String?=null):ExternalModuleDependence
运算符fun String.invoke(组:String,名称:String,版本:String?=null,配置:String?=null,分类器:String?=null,ext:String?=null,dependency配置:ExternalModuleDependency。(->单位):ExternalModuleDependency
运算符fun String.invoke(依赖项:T,依赖项配置:T.()->单位):T
操作符乐趣配置。调用(dependencyNotation:Any):依赖关系?
运算符乐趣配置。调用(dependencyNotation:String,dependencyConfiguration:ExternalModuleDependence.(->单位):ExternalModuleDependence
运算符乐趣配置。调用(组:字符串,名称:字符串,版本:字符串?=null,配置:字符串?=null,分类器:字符串?=null,外部:字符串?=null):ExternalModuleDependence
运算符乐趣配置。调用(组:字符串,名称:字符串,版本:字符串?=null,配置:字符串?=null,分类器:字符串?=null,ext:String?=null,dependencyConfiguration:ExternalModuleDependency。(->单位):ExternalModuleDependency
操作符乐趣配置。调用(依赖项:T,依赖项配置:T.()->单位):T
操作员乐趣调用(配置:DependencyHandlerScope.(->Unit):Unit
第一条显然是适用的

不幸的是,有一个示例,但它只列出了类型而没有列出函数,似乎没有办法查看Kotlin DSL中的所有
invoke
方法:(

查看IDEA(或Android Studio)中的代码应该会向您展示所涉及的类型,这将非常有用

operator fun String.invoke(dependencyNotation: Any): Dependency?
operator fun String.invoke(dependencyNotation: String, dependencyConfiguration: ExternalModuleDependency.() -> Unit): ExternalModuleDependency
operator fun String.invoke(group: String, name: String, version: String? = null, configuration: String? = null, classifier: String? = null, ext: String? = null): ExternalModuleDependency
operator fun String.invoke(group: String, name: String, version: String? = null, configuration: String? = null, classifier: String? = null, ext: String? = null, dependencyConfiguration: ExternalModuleDependency.() -> Unit): ExternalModuleDependency
operator fun <T : ModuleDependency> String.invoke(dependency: T, dependencyConfiguration: T.() -> Unit): T
operator fun Configuration.invoke(dependencyNotation: Any): Dependency?
operator fun Configuration.invoke(dependencyNotation: String, dependencyConfiguration: ExternalModuleDependency.() -> Unit): ExternalModuleDependency
operator fun Configuration.invoke(group: String, name: String, version: String? = null, configuration: String? = null, classifier: String? = null, ext: String? = null): ExternalModuleDependency
operator fun Configuration.invoke(group: String, name: String, version: String? = null, configuration: String? = null, classifier: String? = null, ext: String? = null, dependencyConfiguration: ExternalModuleDependency.() -> Unit): ExternalModuleDependency
operator fun <T : ModuleDependency> Configuration.invoke(dependency: T, dependencyConfiguration: T.() -> Unit): T
operator fun invoke(configuration: DependencyHandlerScope.() -> Unit): Unit