programing tip

Gradle 및 다중 프로젝트 구조

itbloger 2020. 12. 2. 08:11
반응형

Gradle 및 다중 프로젝트 구조


다음 프로젝트 설정에 어떻게 접근해야하는지 이해하려고합니다.

┌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 Modules ' 의 일부 모듈은 두 번째 아젠다를 갖고 싶습니다. .

Actual Android Project를 빌드하는 동안 모듈을 default * 빌드에서 컴파일하고 마지막으로 거의 모든 Android 프로젝트에 대해 기본 build.gradle을 구성하고 싶습니다.이 프로젝트는 복제하고 싶지 않습니다. 파일.

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

내가 찾고있는 것은 Maven parent pom과 같은 것 같지만 Gradle이 어떻게 작동하는지 완전히 이해하지 못하기 때문에 여러분의 생각을 공유하기 위해 이것을 열어 보겠습니다.

모든 모듈의 모든 빌드 논리에서 무언가를 변경하고 싶을 수 있기 때문에 동일한 빌드 파일을 복제하는 것은 허용되지 않는다는 점을 고려하여

이러한 종류의 설정을 처리하는 가장 좋은 방법은 무엇입니까?


이것의 대부분은 http://www.gradle.org/docs/current/userguide/multi_project_builds.html 페이지 에서 매우 정상 입니다. 그러나 당신은 추가해야 할 것입니다

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

그래서 gradle은 모듈 전에 project1과 project2를 평가할 것입니다. 코드가 포함 된 모든 프로젝트에는 빈 build.gradle 파일이 있어야합니다. 또한 필요한 경우 프로젝트를 사용자 정의 할 수 있습니다.

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

프로젝트의 루트에 build.gradle을 추가하십시오. 따라서 유용한 정보가있는 4 개가 필요합니다.

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

/build.gradle 넣어

dependencies {
    project(":module")
}

/settings.gradle 넣어

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

/project1/build.gradle 넣어

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
}

/module/build.gradle 넣어

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")
}

해당 구조와 일치하는 폴더가있는 경우 동일한 빌드 로직을 여러 프로젝트에 적용 할 수 있습니다.

settings.gradle에

include ':project2:moduleA2'

then ':project2' is also a project, and it can have its own build.gradle, in which you can write:

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

    // more configuration
}

If you don't apply any plugin to ':project2' itself then this project simply won't output anything (which is probably what you want) but that way you can configure all its sub-project in a simple go.

Then you can also have all your submodule put some logic that's specific to them

You can also technically do that in project2/build.gradle if you want to keep it all in the same file. You can read http://www.gradle.org/docs/current/userguide/multi_project_builds.html to see how to configure subprojects from a parent build.gradle file, accessing either all subprojects or a specific one, or using filtering.

참고URL : https://stackoverflow.com/questions/17536652/gradle-and-multi-project-structure

반응형