最近では、Spring 5でSpringのリアクティブ機能とkotlin拡張機能を体験するためのコードを記述しようとしています。また、gradleビルドを構成するgradle Kotlin DSL build.gradle.ktも準備しました。
_build.gradle.kt
_は、 http://start.spring.io によって生成されたSpring Bootテンプレートコードから変換されます。
ただし、ext
内のbuildscript
はGradleで検出できません。
_buildscript {
ext { }
}
_
ext
はGradleビルドエラーを引き起こします。
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
およびcompile("org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlinVersion")
の変数を機能させるために、変数を難しい方法で追加しました。
_val kotlinVersion = "1.1.4"
val springBootVersion = "2.0.0.M3"
_
しかし、グローバルな最上位の場所でそれらを宣言し、buildscript
で複製する必要があります。
コード: https://github.com/hantsy/spring-reactive-sample/blob/master/kotlin-gradle/build.gradle.kts
ext
を機能させるための優雅なアプローチはありますか?
Update:いくつかのいアプローチがあります:
Gradle Kotlin DSLの例、 https://github.com/gradle/kotlin-dsl/tree/master/samples/project-properties から、gradel.propertiesでプロパティを宣言しています。
_kotlinVersion = 1.1.4
springBootVersion = 2.0.0.M3
_
そして、build.gradle.ktsで使用します。
_buildScript{
val kotlinVersion by project
}
val kotlinVersion by project //another declare out of buildscript block.
_
上記と同様に、buildScriptブロックで宣言します。
_buildScript{
extra["kotlinVersion"] = "1.1.4"
extra["springBootVersion"] = "2.0.0.M3"
val kotlinVersion: String by extra
}
val kotlinVersion: String by extra//another declare out of buildscript block.
_
val kotlinVersion:String by extraの重複を回避するにはどうすればよいですか?
Kotlin DSL extがextraに変更され、buildscriptで使用できるようになりました。
例:-
buildscript {
// Define versions in a single place
extra.apply{
set("minSdkVersion", 26)
set("targetSdkVersion", 27)
}
}
私のために働いているのは、ext
の代わりにallprojects
でbuildscript
を使用しているので、トップレベルでbuild.gradle.kts
allprojects {
ext {
set("supportLibraryVersion", "26.0.1")
}
}
次のようなモジュールのbuild.gradle.kts
ファイルで使用できます。
val supportLibraryVersion = ext.get("supportLibraryVersion") as String
Kotlin-gradle-dslのグローバルプロパティ:
https://stackoverflow.com/a/53594357/3557894
Kotlinバージョンはkotlin-gradle-dslに組み込まれています。
次のように、埋め込みバージョンで依存関係を使用できます。
implementation(embeddedKotlin("stdlib-jdk7"))
classpath(embeddedKotlin("gradle-plugin"))
Kotlinで使用できる新しい可能性があります。
object DependencyVersions {
const val JETTY_VERSION = "9.4.12.v20180830"
}
dependencies{
implementation("org.Eclipse.jetty:jettyserver:${DependencyVersions.JETTY_VERSION}")
}
ここで、DependencyVersionsは私が選択した名前です。 「MyProjectVariables」のような別の名前を選択できます。これは、extraプロパティまたはextプロパティの使用を回避する方法です。