いくつかの独立したビルドがあります(それぞれの独立したビルドはマルチプロジェクトビルドです)。サブプロジェクトで再利用される一連の一般的なタスクがあり、独立したビルド間で多くの繰り返しがあるため、メインのビルドスクリプトは非常に大きくなります。私たちが探しているのは:
- メインビルドファイルをより小さなファイルに分割する方法
- ビルドの一部を他の独立したビルドで再利用する方法
Gradleでそれを達成するための最良の方法は何ですか?
いくつかの独立したビルドがあります(それぞれの独立したビルドはマルチプロジェクトビルドです)。サブプロジェクトで再利用される一連の一般的なタスクがあり、独立したビルド間で多くの繰り返しがあるため、メインのビルドスクリプトは非常に大きくなります。私たちが探しているのは:
Gradleでそれを達成するための最良の方法は何ですか?
Gradle 0.9 では、別のビルド スクリプトからビルド スクリプトをインポートできます。外部ビルド スクリプトを使用してプロジェクトを構成する をご覧ください。基本的にはapply from: 'other.gradle'
です。
ユーザー ガイドで言及されていないことの 1 つは、'from' パラメーターを URL にすることができるため、共有スクリプトを HTTP 経由でどこか (たとえば、subversion リポジトリ) で使用できるようにし、それらを複数のビルドからインポートできることです。
私が見つけた解決策は、ファイルにあるものをマッピングすることを意味しother.gradle
ます。
def getVersionName = { testParam ->
println "${testParam}"
def stdout = new ByteArrayOutputStream()
exec {
commandLine 'git', 'describe', '--tags'
standardOutput = stdout
}
return stdout.toString().trim()
}
ext{
VERConsts = [:]
VERConsts['NAME'] = getVersionName("test param")
VERConsts['NAME_CALL'] = getVersionName
}
次に、build.gradle
ファイルで次のようにします。
apply from: 'other.gradle'
// ...
android {
defaultConfig {
versionName VERConsts['NAME_CALL']("test param")
// or
versionName VERConsts['NAME']
}
}
次に、versionName
呼び出し結果が表示されます。
注:
VERConsts['NAME'] = getVersionName()
呼び出しgetVersionName()
てその結果を保存します。たとえば、スクリプトでそれを使用するとversionName VERConsts['NAME']
、保存された値が割り当てられます。VERConsts['NAME_CALL']
代わりに関数への参照を格納します。スクリプトで使用VERConsts['NAME_CALL']()
すると、実際に関数が呼び出され、結果が変数に割り当てられます前者の場合、スクリプト全体で同じ値が割り当てられますが、後者の場合は異なる値になる可能性があります (たとえば、スクリプトの実行中に誰かが別のバージョンをプッシュした場合)。