web-dev-qa-db-ja.com

buildscriptのextはGradle Kotlin DSLで認識できません

最近では、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:いくつかのいアプローチがあります:

  1. 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.
    _
  2. 上記と同様に、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の重複を回避するにはどうすればよいですか?

19
Hantsy

Kotlin DSL extがextraに変更され、buildscriptで使用できるようになりました。

例:-

buildscript {
    // Define versions in a single place
    extra.apply{
        set("minSdkVersion", 26)
        set("targetSdkVersion", 27)
    }
}
13
Shashi Bhushan

私のために働いているのは、extの代わりにallprojectsbuildscriptを使用しているので、トップレベルでbuild.gradle.kts

allprojects {
  ext {
    set("supportLibraryVersion", "26.0.1")
  }
}

次のようなモジュールのbuild.gradle.ktsファイルで使用できます。

val supportLibraryVersion = ext.get("supportLibraryVersion") as String
7
kamil zych

Kotlin-gradle-dslのグローバルプロパティ:
https://stackoverflow.com/a/53594357/3557894


Kotlinバージョンはkotlin-gradle-dslに組み込まれています。
次のように、埋め込みバージョンで依存関係を使用できます。

implementation(embeddedKotlin("stdlib-jdk7"))

classpath(embeddedKotlin("gradle-plugin"))
3
aruy

Kotlinで使用できる新しい可能性があります。

object DependencyVersions {
    const val JETTY_VERSION = "9.4.12.v20180830"
}

dependencies{
    implementation("org.Eclipse.jetty:jettyserver:${DependencyVersions.JETTY_VERSION}")
}

ここで、DependencyVersionsは私が選択した名前です。 「MyProjectVariables」のような別の名前を選択できます。これは、extraプロパティまたはextプロパティの使用を回避する方法です。