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
'programing tip' 카테고리의 다른 글
dcast와 유사한 깔끔한 여러 열에 스프레드를 사용할 수 있습니까? (0) | 2020.12.02 |
---|---|
.net에서 FFmpeg를 사용하십니까? (0) | 2020.12.02 |
Android Lollipop에서 Notification.Builder.setSmallIcon으로 설정된 아이콘이 흰색 사각형으로 표시되는 이유는 무엇입니까? (0) | 2020.12.02 |
Docker의 기본 WORKDIR은 무엇입니까? (0) | 2020.12.02 |
클래스 정적 변수 초기화 순서 (0) | 2020.12.02 |