Gradleビルドの一般的な部分を分割/因数分解する方法はありますか

StackOverflow https://stackoverflow.com/questions/2566685

  •  24-09-2019
  •  | 
  •  

質問

いくつかの独立したビルドがあります(各独立したビルドはマルチプロジェクトビルドです)。メインのビルドスクリプトは、サブプロジェクトによって再利用される一連の一般的なタスクと、独立したビルドの間に多くの繰り返しがあるため、非常に大きくなります。私たちが探しているのは次のとおりです。

  1. メインビルドファイルを小さなファイルに分割する方法
  2. 他の独立したビルドでビルドの一部を再利用する方法

Gradleでそれを達成するための最良の方法は何ですか?

役に立ちましたか?

解決

Gradle 0.9を使用すると、別のビルドスクリプトからビルドスクリプトをインポートできます。見て: 外部ビルドスクリプトを使用してプロジェクトを構成します. 。基本的にそうです apply from: 'other.gradle'.

ユーザーガイドが言及していないことの1つは、「From」パラメーターがURLになる可能性があるため、共有スクリプトをどこか(例:Subversion Repositoryなど)で利用可能にし、複数のビルドからインポートできることです。

他のヒント

私が見つけたソリューションは、あなたがあなたの中に持っているものをマッピングすることを意味します other.gradle ファイル。

def getVersionName = { ->
    def stdout = new ByteArrayOutputStream()
    exec {
        commandLine 'git', 'describe', '--tags'
        standardOutput = stdout
    }
    return stdout.toString().trim()
}
ext{
    VERConsts = [:]
    VERConsts['NAME'] = getVersionName()
    VERConsts['NAME_CALL'] = getVersionName
}

それから、あなたの中に build.gradle ファイル:

apply from: 'other.gradle'
// ...
android {
    defaultConfig {
        versionName VERConsts['NAME_CALL']()
        // or
        versionName VERConsts['NAME']
    }
}

そうして versionName 通話結果があります。

ノート:

  • VERConsts['NAME'] = getVersionName() 電話します getVersionName() その結果を保存します。スクリプトでそれを使用します versionName VERConsts['NAME'] 次に、保存された値を割り当てます。
  • VERConsts['NAME_CALL'] 代わりに、関数への参照を保存します。使用 VERConsts['NAME_CALL']() スクリプトでは実際に関数を呼び出し、結果を変数に割り当てます

前者はスクリプト全体に同じ値が割り当てられ、後者は異なる値をもたらす可能性があります(たとえば、誰かがあなたのスクリプトの実行中に別のバージョンをプッシュする場合)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top