我想在具有以下限制的项目中开始使用Kotlin DSL与Gradle:
- 该项目有不同的模块(而且有时这些模块使用不同的插件,但是如果两个项目使用相同的插件,则插件的版本是相同的)。
- 该项目只有内部企业存储库(例如,我们不直接使用jcenter,而是使用代理)。
Groovy示例:
- 某些常见配置项被排除到单独的脚本中。 请查看下面的示例。
- Gradle模块包括这些文件。
结果(仅基于我的示例):
- 我们不需要将相同的代码行添加到每个模块中。
- 大多数项目仅在依赖项列表方面有所不同。
我尝试使用Gradle KTS复制相同的功能,但遇到了以下困难:
- 我无法在包含的文件中应用插件并在模块中使用它。 在这种情况下,我会收到编译错误(因为插件类型未添加到模块脚本中)。
- 我无法提取常量到公共位置以在每个脚本中使用它们(包括根
build.gradle.kts
)。 使用Groovy,我可以像springBootVersion
那样使用变量,但是使用Kotlin Script时,我必须在每个模块文件中创建相同的属性。 - 预编译脚本插件没有公共存储库访问权限(例如,我无法使用想法“只需使用默认嵌入式Kotlin脚本版本,从这些网址下载所有依赖项的通用脚本文件进行配置”)。
包含文件示例:
apply plugin: 'kotlin'
compileKotlin {
kotlinOptions {
jvmTarget = "1.8"
}
}
compileTestKotlin {
kotlinOptions {
jvmTarget = "1.8"
}
}
Gradle模块示例:
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
进行包含,并进行编译时检查? - 如何提取应用于包含脚本的插件(以避免Gradle模块脚本过载)?
- 如何在没有公共全局存储库访问权限的情况下使用预编译脚本插件?
附加链接: