2017-08-13 17 views
1

すべてのgradleタスクのリストをファイルに書き込もうとしています。私はもちろん、これにはtasksコマンドを使用できますが、他の gradleコマンドが呼び出されるたびにファイルにキャッシュします。例えば、私が./gradlew buildを実行するたびに、利用可能なタスクをファイルに書きたいと思っています。 ビルドスクリプトからすべてのGradleタスクのリストを取得する

この

は十分に単純なように見えた、と私はそれを試してみるには、以下のタスクを書いた:

task cacheTasks() { 
    doLast { 
     allprojects { p -> 
      p.tasks*.each { t -> 
       println(p.name + ":" + t.name) 
      } 
     } 
    } 
} 

問題は、私が唯一の利用可能なすべてのタスクのサブセットを取得していること。 ./gradlew tasks --allコマンドを実行すると、さらに多くのコマンドが出力されます。組み込みのタスク(のようなbuildcleanまたはhelp)のどれもが、私はループそれ以上tasks*リストに登録されていないようですが、奇妙なことに、私はは、それらを直接参照することができます。

tasks.build { t -> 
    println("DEBUG:" + t.name) 
} 

それはそう思えます単純ですが、私は無駄な解決策を探しています。私はgrad3のソースコードを見てみて、tasksタスクの仕組みを見てみましたが、なぜこれがうまくいかないのかという手掛かりは見つかりませんでした。

答えて

1

は、私は非常に名前buildと、容器内のタスククラスがある疑い。

これは私があなたのタスクデバッグするときに取得されるものです:

tasks


を私はgradle buildが実行されないと言っていないのですが、それは他の形態でorg.gradle.api.tasks.GradleBuildの多分インスタンスすることができます。 (私は、gradleのソースコードは私がコンパイルして実行するのが非常に難しいため、あまりよく分かりません)。

tasks.build { t -> 
    println("DEBUG:" + t.name) 
} 

を使用してあなたが実際にorg.gradle.api.tasks.TaskContainer#create(java.util.Map<java.lang.String,?>, groovy.lang.Closure)を呼び出し、buildという名前の新しいタスクを作成します。

+0

'tasks.build'が新しいタスクを作成するという良い点があります。私はそれが起こるのを忘れた。しかし、これはどのように私はすべてのタスクのリストを取得することができるの質問に答えることはありません... – meonlol

関連する問題