2016-08-19 11 views
0

私は、サブプロジェクトにルートプロジェクトとは独立したバージョン番号が割り当てられているマルチプロジェクトの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.gradlecustomPlugin { ... }前に実行されるため、それはエラーが発生します。私はdependsOn、mustRunAfter、および他のテクニックを使用してみましたが、どれも希望の効果がないようです。 (おそらく私はライフサイクルを完全に理解していませんが、サブプロジェクトの前にルートプロジェクトを設定して実行しているようですが、ルートを構成してからサブプロジェクトを構成して実行してはいけませんか?)

コピー/ペーストや定型句を使わずに、各サブプロジェクトのバージョンを適切なリソースファイルに挿入しますか?

+0

あなたはこれを理解したことがありますか?あなたができることの1つは、サブプロジェクトが評価された後にproject.subprojects {sub - > sub.evaluate() //ここにコードを置く}ですが、評価ロジックを変更せずにこれを実行しようとしています。ソリューション私はそれを聞くのが大好きだ – BoredAndroidDeveloper

答えて

1

はこのようにそれをやって試してみてください。

subprojects { project -> 
    // your code 
} 

そうでないprojectは、バージョンが指定されていないルートプロジェクトを参照します。

+1

それを試してみましたが、私はサブプロジェクトでそれらを設定しているが、gradleは 'プロジェクト'はプロパティを持っていないと言う。 – Wrench

1

私はこれを自分のために考え出しました。 root.Projectに何かを適用するためにinit.gradleファイルを使用していますが、私はサブプロジェクトからデータが必要です。

rootProject { 
    project.subprojects { sub -> 
     sub.evaluate() 
     //Put your code here 

しかし、私は評価するために、サブプロジェクトを強制効果は、私は次のようでしたので、持っているだろうかサイドわかりませんでした:

allprojects { 
    afterEvaluate { project -> 
     //Put your code here 
私はそれを修正する前に

最初のオプションは、各サブプロジェクトを評価することでした

関連する問題