2

だから、私は今、希望どおりに機能しているように見える次のものを持っています

task deleteJars(type: Delete) {
    ext.collection = files { genLibDir.listFiles() }
    delete ext.collection
}

task copyJars(type: Copy) { 
    from(configurations.compile) {}
    from(fixedLibDir) {}
    into genLibDir
}

copyJars.dependsOn('deleteJars')

少し質問があります

  1. それを1つの関数にgradleの方法で書き込むためのよりクリーンな方法はありますか?
  2. 以前、私は以下を持っていましたが、copyJarsタスクが実行されたときではなく、コピー機能が常に実行されるようです?
  3. タスクに単純なGroovy(たとえば、ファイルの削除、ファイルのコピーなど)を記述して、タスクが依存しているときに正しく実行されるようにするにはどうすればよいですか?

タスクが依存しているときにGroovyを実行するという私の恐ろしい試み(ただし、残念ながら、どのターゲットを選択して実行するたびに実行しても実行されました)...

task('copyJars') { 
    ext.collection = files { genLibDir.listFiles() }
    delete ext.collection
    copy { from configurations.compile into genLibDir }
    copy { from fixedLibDir into genLibDir }
}

だから私の主な質問は、タスクでGroovyスクリプトを記述して、そのタスクが実行されたときにのみ実行されるようにする方法です。(上記はGroovyスクリプトだと思っていましたが、毎回実行されるようです)

ありがとう、ディーン

4

2 に答える 2

2

Gradle ビルドは、初期化、構成、実行の 3 つのフェーズで進行します。ビルド スクリプト内のほとんどのコードは、構成フェーズで評価されます。これは、最終的に実行されるタスクとは関係ありません。(実行するタスクの決定は、すべてのタスクとその依存関係が判明した構成フェーズの最後にのみ行われます。) タスクが実行された場合 (つまり、実行フェーズ) に実行されるコードを追加するには、次のようにします。doFirstまたはを使用doLastして、いわゆるタスク アクションをタスクに追加します。例えば:

task copyJars {
    doLast { /* put any Groovy code here */ }
}

これらの概念の詳細については、Gradle ユーザー ガイドを参照してください。

于 2012-09-05T21:34:07.570 に答える
0

わかりました、それを使用して、これは機能しました(ただし、タスクのタイプを取り出す必要がありました。そうしないと、実行されませんでした)

task copyJars() {
    doLast {
        ext.collection = files { genLibDir.listFiles() }
        delete ext.collection
        copy { from configurations.compile into genLibDir }
        copy { from fixedLibDir into genLibDir }
    }
}
于 2012-09-06T12:33:49.060 に答える