私は、以下の制限と、プロジェクトでのGradleでKotlin DSLを使用して起動しようとしています:
- プロジェクトが(しかも2つのプロジェクトが同じプラグインを使用している場合、時には、これらのモジュールは、その後、プラグインのバージョンが同じであるが、別のプラグインを使用)異なるモジュールがあります。
- プロジェクトでは、唯一の社内リポジトリを持っている(例えば、我々が直接jcenter使用していない、我々はそれのためにプロキシを使用します)。
私たちはGroovyのであります。
- いくつかの一般的な設定項目は、別のスクリプトに除外されています。以下の例をご確認ください。
- Gradleのモジュールは、これらのファイルが含まれています。
その結果、(ちょうど私の例に基づいて):
- 私たちは、各モジュールに同じコード行を追加する必要はありません。
- プロジェクトのほとんどは、単に依存リストとの違いがあります。
私はGralde KTSと同じ再現してみましたし、次の困難を受けました:
- 私は、ファイルをインクルードし、モジュールで使用中のプラグインに適用することができませんでしだ。(プラグインタイプのモジュールのスクリプトに追加されないので)、この場合、私はコンパイルエラーを受け取ります。
- 私は、各スクリプト(ルートでそれらを使用するために何か共通の定数を抽出することができないんだ
build.gradle.kts
包括的)。Groovyの私は同じように変数を使用することができるとともにspringBootVersion
、しかしKotlinスクリプトIと、各モジュールのファイルに同じプロパティを作成する必要があります。 - プリコンパイル済みスクリプトプラグインは、例えば、私はアイデアを一般的なスクリプトファイルを設定することができないんです(パブリックリポジトリにアクセスせずに仕事をしません「:...ただ、これらのURLからすべての依存関係をダウンロードし、デフォルトの組み込み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のモジュールスクリプトの過負荷を回避するため)に適用するプラグイン抽出することができますか?
- どのようにして使用することができますプリコンパイルスクリプトプラグインを公共のグローバルなリポジトリにアクセスせずに?
追加リンク:
防止はどこにでもコンパイル時のチェックを持っていることを、現在Kotlin DSL(5.3)には限界があります。Kotlin DSLが動作するためには、それはGradleのAPIの上に拡張子を追加すると、それは魔法のようにそれを行うことはできません持っています。あなたが通過する必要がまず第一にKotlin DSLプライマーそれを理解するためのページ。
どのように私には、スクリプト(Gradleのモジュールスクリプトの過負荷を回避するため)に適用するプラグイン抽出することができますか?
それを行うための一つの方法は、使用することですプリコンパイルされたビルドスクリプトを Kotlin 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")
}