web-dev-qa-db-ja.com

Gradleビルドスクリプトで変数を使用する

私は自分のプロジェクトでGradleを使用しています。私は私の戦争でいくつかの追加の構成を行うためのタスクがあります。私のようなタスクで使用する文字列を作成する必要があります。

task extraStuff{
    doStuff 'org.springframework:spring-web:3.0.6.RELEASE@war'
}

これは正常に機能します。私がする必要があるのは、バージョンを定義し(実際にプロパティファイルで既に定義されている)、これを次のようなタスクで使用することです:

springVersion=3.0.6.RELEASE

task extraStuff{
    doStuff 'org.springframework:spring-web:${springVersion}@war'
}

私の問題は、春バージョンが変数として認識されないことです。それでは、文字列内でどのように渡すことができますか?

22
huzeyfe

私は問題が文字列リテラル区切り文字にあるかもしれないと思う:

  1. 文字列リテラルはgroovyとまったく同じように定義されているため、一重引用符または二重引用符で囲みます(例:"3.0.6.RELEASE");
  2. Gstringsは単一引用符文字列で解析されません(両方とも単一の'...'またはトリプル'''...''' ones)正しくリコールした場合。

したがって、コードは次のようになります。

springVersion = '3.0.6.RELEASE' //or with double quotes "..."

task extraStuff{
    doStuff "org.springframework:spring-web:${springVersion}@war"
}
26

Androidアプリを使用してGradleを開発している場合、変数を宣言する(つまり、いくつかの依存関係バージョンを保持する)には、キーワードdef以下のように:

def dependsVersion = '1.2'

dependencies {
    compile "groupId:artifactId:${dependsVersion}"
}

お役に立てば幸いです!

28
hzitoun

On Androidこれを実現する方法は実際には2つの可能性があります。どちらがニーズに合っているかによります。これら2つの可能性には長所と短所があります。def変数またはext{}ブロック。変数defは、変数をクリックして、ファイル内でext{}その正確な変数を指していないブロック。一方 ext{}には1つの優れた利点があります。つまり、project_name/build.gradleからproject_name/app/build.gradleこれは非常に便利な場合もありますが、その変数をクリックすると、たった1つのファイル内でのみ、その変数の定義を指摘することはできません。リストが大きくなります。

1)defオプション。これが最適であり、検索時間を節約できます。

def lifecycle = '2.0.0'

dependencies {
    implementation 'androidx.lifecycle:lifecycle-extensions:$lifecycle'
}

2)2番目のext {}ブロック。依存関係リストが巨大でなければ大丈夫です。

ext {
    lifecycle = '1.1.1'
}

dependencies {
    implementation 'androidx.lifecycle:lifecycle-extensions:$lifecycle'
}

)場合によっては、変数を共有したい場合project_name/build.gradleおよびproject_name/app/build.gradleext {}を使用

project_name/build.gradleでは、kotlin_shared_variable

buildscript {
    ext.kotlin_shared_variable = '1.3.41'

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_shared_variable"
    }
}

project_name/app/build.gradleで使用できます

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_shared_variable"
}

そしてもちろん、それらを組み合わせることができます。

0
Kebab Krabby