멀티 프로젝트 Gradle 빌드가 있는데, 여기서 서브 프로젝트에는 루트 프로젝트와 독립적 인 버전 번호가 지정됩니다. 각 하위 프로젝트의 몇 가지 리소스 파일에이 버전 번호를 주입하고 싶습니다. 일반적으로 루트 빌드의 각 하위 프로젝트에 대해 processResources 작업을 구성하여이 작업을 수행합니다. 그러나 문제는 Gradle이 하위 프로젝트의 빌드 파일을로드하기 전에 processResources 태스크를 실행하는 것으로 나타나며 버전으로 "지정되지 않음"을 주입한다는 것입니다.서브 프로젝트가 구성된 후에 Gradle 태스크를 실행하십시오.
/settings.gradle
include 'childA' // ... and many others
/build.gradle
subprojects {
apply plugin: 'java'
apply plugin: 'com.example.exampleplugin'
}
subprojects {
// This has to be configured before processResources
customPlugin {
baseDir = "../common"
}
processResources {
// PROBLEM: version is "unspecified" here
inputs.property "version", project.version
// Inject the version:
from(sourceSets.main.resources.srcDirs) {
include 'res1.txt', 'res2.txt', 'res3.txt'
expand 'version':project.version
}
// ...
}
}
/childA/build.gradle :
현재, 내 프로젝트는 다음과 같습니다
version = "0.5.424"
나는 루트의 build.gradle
의 시작 부분에 evaluationDependsOnChildren()를 추가로 보였지만, 그 때문에 childA/build.gradle
실행 customPlugin { ... }
전에 오류가 발생합니다. dependsOn, mustRunAfter 및 다른 기술을 사용하여 시도했지만 아무도 원하는 효과가없는 것 같습니다. (아마 수명주기를 완전히 이해하지 못했지만 루트 프로젝트를 구성하고 서브 프로젝트 전에 실행 한 것처럼 보입니다. 루트를 구성한 다음 서브 프로젝트를 구성하고 실행하지 않아야합니까?)
어떻게 얻을 수 있습니까? 각 하위 프로젝트의 버전을 복사/붙여 넣기 또는 상용구없이 많은 리소스 파일에 삽입하십시오.
혹시 이것을 알아 냈습니까? 당신이 할 수있는 한 가지는 서브 프로젝트가 평가 된 후에 project.subprojects {sub -> sub.evaluate() // 여기에 코드를 넣는다}입니다.하지만 평가 로직을 변경하지 않고이 작업을 수행하려고합니다. 그래서 만약 당신이 다른 것을 알아 내면 해결책을 듣고 싶습니다. – BoredAndroidDeveloper