我想开始使用科特林DSL与具有以下限制的gradle项目:
我们有什么用Groovy:
结果(只是基于我的例子):
我试图重现与Gralde KTS相同,收到了以下困难:
build.gradle.kts
包括在内)。使用Groovy,我可以只使用像变量springBootVersion
,但与科特林脚本我必须创建在每个模块文件相同的属性。包括文件示例:
apply plugin: 'kotlin'
compileKotlin {
kotlinOptions {
jvmTarget = "1.8"
}
}
compileTestKotlin {
kotlinOptions {
jvmTarget = "1.8"
}
}
摇篮模块示例:
apply from: "${rootDir}/gradle/include/kotlin-common-include.gradle"
dependencies {
compile project(':my.project.libraries.common')
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: springBootVersion
}
问题:
springBootVersion
或Constants.springBootVersion
编译时检查?其他链接:
有在当前科特林DSL(5.3)的限制,以防止有编译时检查无处不在。为了科特林DSL工作它必须在摇篮API之上添加扩展,它不能做到这一点神奇。首先,你需要经过科特林DSL入门页面去了解它。
我如何可以提取插件应用到包括脚本(以避免摇篮模块脚本超负荷)?
这样做的一个方法是使用预编译的构建脚本与科特林DSL插件。为了做到这一点,你需要你的脚本进入$rootDir/buildSrc
项目。这里怎么可能是这样的:
// $rootDir/buildSrc/build.gradle.kts
plugins {
`kotlin-dsl`
}
repositories {
maven {
url = uri("http://host:8082/artifactory/...")
}
}
然后把你常用的书写这样的:
// $rootDir/buildSrc/src/main/kotlin/common.gradle.kts
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm") version "1.3.21"
}
tasks.compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
tasks.compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
然后,您可以将此脚本作为一个这样的插件:
// $rootDir/build.gradle.kts
subprojects {
apply(id = "common")
}
如何使用预编译脚本插件没有公众的全球存储库访问?
配置自定义库的预编译脚本,插件是你平时的构建脚本没有什么不同。那样做:
// $rootDir/buildSrc/settings.gradle.kts
pluginManagement {
repositories.maven {
url = uri("http://host:8082/artifactory/...")
}
}
各地,如果你不想使用预编译的插件的另一种方法是配置扩展明确。你可以做这样的:
// $rootDir/gradle/common.gradle.kts
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "1.8"
}
而在主脚本:
// $rootDir/build.gradle.kts
subprojects {
apply {
plugin(KotlinPlatformJvmPlugin::class)
from("common.gradle.kts")
}
}
我怎样才能把所有公用常数(如依赖版本)到单独的文件中只是使用类似springBootVersion或Constants.springBootVersion编译时检查,包括他们?
有没有好的办法做到这一点现在。您可以使用额外的属性,但它并不能保证编译时检查。类似的东西:
// $rootDir/dependencies.gradle.kts
// this will try to take configuration from existing ones
val compile by configurations
val api by configurations
dependencies {
compile("commons-io:commons-io:1.2.3")
api("some.dep")
}
// This will put your version into extra extension
extra["springBootVersion"] = "1.2.3"
你可以使用它像这样:
// $rootDir/build.gradle.kts
subprojects {
apply {
plugin<JavaLibraryPlugin>()
from("$rootDir/dependencies.gradle.kts")
}
而你的模块中:
// $rootDir/module/build.gradle.kts
// This will take existing dependency from extra
val springBootVersion: String by extra
dependencies {
compile("org.spring:boot:$springBootVersion")
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句