62

次のプロジェクト設定にどのようにアプローチすればよいかを理解しようとしています:

┌Top Android Project
│
├── Project 1 - (Pure Java Modules)
│    │
│    ├── Module A1
│    ├── Module B1
│    :
│    └── Module Z1
│  
├── Project 2 - (Android Libraries Modules)
│    │
│    ├── Module A2
│    ├── Module B2
│    :
│    └── Module Z2
│  
└── Module - Actual Android Project

私が持っている現在のセットアップでは、各モジュールに build.gradle があります。このセットアップで本当に嫌いなのは、build.gradle のすべてのコンテンツがモジュール間で複製されることです。

実際には、それらのほとんどで同じロジックが必要です。「Pure Java Modules」はすべてインフラ モジュールであり、出力、JavaDoc、およびソースを Jar し、リモート リポジトリにデプロイします (* デフォルト)。

一方、「Pure Java モジュール」の一部のモジュールでは、たとえば、デフォルト* ビルドとは別に、特定のプロジェクトの依存関係を含む jar をデプロイしたいなど、2 番目のアジェンダが必要です。 .

Actual Android Projectをビルドしている間、モジュールを default* ビルドでコンパイルし、最後にすべての Android プロジェクト (かなりの数) のデフォルトの build.gradle を構成したいと思いますが、それを複製したくありません。ファイル。

================================================= =============

私が探しているのは Maven の親 pom のようなものだと思いますが、Gradle の仕組みを完全には理解していないので、皆さんの考えを共有するためにこれを公開しています...

すべてのモジュールのすべてのビルドロジックで何かを変更したいかもしれないという事実のために、同じビルドファイルを複製することは(あえて言うと)受け入れられないことを考慮してください

この種のセットアップを処理するための最良のアプローチは何でしょうか?

4

2 に答える 2

60

Most of this is pretty normal to the http://www.gradle.org/docs/current/userguide/multi_project_builds.html page. However you are going to need to add

evaluationDependsOn(':project1')
evaluationDependsOn(':project2')

so that gradle will evaluate project1 and project2 before module. In all the projects that contain code you will need to have an empty build.gradle file. This will also allow you to customize a project if needed.

Example: https://github.com/ethankhall/AndroidComplexBuild

Add a build.gradle at the root of your projects. So you need 4 that have useful information in it.

/build.gradle
/settings.gradle
/project1/build.gradle
/project2/build.gradle
/module/build.gradle

in /build.gradle put

dependencies {
    project(":module")
}

in /settings.gradle put

include ':module'
include ':project1', ':project1:A1', ':project1:B1', ':project1:Z1'
include ':project2', ':project2:A2', ':project2:B2', ':project2:Z2'

in /project1/build.gradle put

apply plugin: 'java'

subprojects {
    apply plugin: 'java'

    sourceCompatibility = JavaVersion.VERSION_1_6
    targetCompatibility = JavaVersion.VERSION_1_6

    repositories{
        mavenCentral()
    }   

    //Anything else you would need here that would be shared across all subprojects
}

/project2/build.gradle

buildscript {
    repositories {
        mavenCentral()
    }   

    dependencies {
        classpath 'com.android.tools.build:gradle:0.4.2'
    }   
}

subprojects {
    apply plugin: 'android-library'

    android {
        compileSdkVersion 17
        buildToolsVersion "17.0"
    }   

    sourceCompatibility = JavaVersion.VERSION_1_6
    targetCompatibility = JavaVersion.VERSION_1_6

    repositories{
        mavenCentral()
    }   

    //Anything else you would need here that would be shared across all subprojects
}

in /module/build.gradle put

buildscript {
    repositories {
        mavenCentral()
    }   

    dependencies {
        classpath 'com.android.tools.build:gradle:0.4.2'
    }   
}

evaluationDependsOn(':project1')
evaluationDependsOn(':project2')

apply plugin: 'android'

android {
    compileSdkVersion 17
    buildToolsVersion "17.0"
}

dependencies {
    compile project(":project1:A1")
    compile project(":project1:B1")
    compile project(":project1:Z1")

    compile project(":project2:A2")
    compile project(":project2:B2")
    compile project(":project2:Z2")
}
于 2013-07-09T00:33:23.410 に答える
8

その構造に一致するフォルダーがある場合は、同じビルド ロジックを複数のプロジェクトに適用できます。

あなたの settings.gradle が含まれている場合

include ':project2:moduleA2'

':project2' もプロジェクトであり、独自の build.gradle を持つことができ、次のように記述できます。

subprojects { project ->
    apply plugin 'android-library'

    // more configuration
}

':project2' 自体にプラグインを適用しない場合、このプロジェクトは単に何も出力しません (おそらくこれが必要です) が、その方法ですべてのサブプロジェクトを簡単に構成できます。

次に、すべてのサブモジュールに、それらに固有のロジックを配置することもできます

すべてを同じファイルに保持したい場合は、技術的に project2/build.gradle でそれを行うこともできます。http://www.gradle.org/docs/current/userguide/multi_project_builds.htmlを読んで、親 build.gradle ファイルからサブプロジェクトを構成する方法、すべてのサブプロジェクトまたは特定のサブプロジェクトにアクセスする方法、またはフィルタリングを使用する方法を確認できます。

于 2013-07-08T23:38:57.310 に答える