私は、サブプロジェクトにルートプロジェクトとは独立したバージョン番号が割り当てられているマルチプロジェクトの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、および他のテクニックを使用してみましたが、どれも希望の効果がないようです。 (おそらく私はライフサイクルを完全に理解していませんが、サブプロジェクトの前にルートプロジェクトを設定して実行しているようですが、ルートを構成してからサブプロジェクトを構成して実行してはいけませんか?)
コピー/ペーストや定型句を使わずに、各サブプロジェクトのバージョンを適切なリソースファイルに挿入しますか?
あなたはこれを理解したことがありますか?あなたができることの1つは、サブプロジェクトが評価された後にproject.subprojects {sub - > sub.evaluate() //ここにコードを置く}ですが、評価ロジックを変更せずにこれを実行しようとしています。ソリューション私はそれを聞くのが大好きだ – BoredAndroidDeveloper