61

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

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

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

4

2 に答える 2

75

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

ユーザー ガイドで言及されていないことの 1 つは、'from' パラメーターを URL にすることができるため、共有スクリプトを HTTP 経由でどこか (たとえば、subversion リポジトリ) で使用できるようにし、それらを複数のビルドからインポートできることです。

于 2010-04-05T07:38:19.173 に答える
39

私が見つけた解決策は、ファイルにあるものをマッピングすることを意味し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']()すると、実際に関数が呼び出され、結果が変数に割り当てられます

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

于 2014-11-30T23:40:45.037 に答える