私はGradle 2.14.1とhttps://github.com/unbroken-dome/gradle-testsets-pluginを使って統合テストタスクを追加しています。私はHTMLレポートの場所を設定したいと思います。 デフォルトのタスクが使用しています:その後に追加されたタスクの `tasks.withType()`奇妙な動作
<project>/build/reports/tests
をtestsetsプラグインは設定しています。intTest
タスクの
<project>/build/intTest
を、そして私がしたい:ここ
<project>/build/reports/test
<project>/build/reports/intTest
は私の設定です:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.unbroken-dome.gradle-plugins:gradle-testsets-plugin:1.2.0'
}
}
apply plugin: 'java'
apply plugin: 'org.unbroken-dome.test-sets'
defaultTasks = ['clean', 'build']
tasks.withType(Test) {
reports.html.destination = new File(project.reportsDir, name)
println(it.name + '\t' + reports.html.destination)
}
task wrapper(type: Wrapper) {
description = 'Defines the common gradle distribution for this project.'
gradleVersion = '2.14.1'
}
testSets {
intTest
}
intTest.dependsOn test
check.dependsOn intTest
repositories {
jcenter()
}
dependencies {
testCompile 'junit:junit:4.12'
intTestCompile 'junit:junit:4.12'
}
println('===== final config =====')
println(test.name + '\t' + test.reports.html.destination)
println(intTest.name + '\t' + intTest.reports.html.destination)
(当面println
文を無視してください。)
をフルビルドした後、intTest
タスクのレポートは、間違った場所(デフォルト)であり、かつ標準test
タスクの設定が適用されます。
$ ls build/
classes dependency-cache intTest intTest-results libs reports test-results tmp
$ ls build/reports/
test
(プロジェクトのルートは、「ブロブ」です)私が起こっているかを確認するためにいくつかの出力を追加し、それは奇妙なよう:
test /home/wujek/blob/build/reports/test
intTest /home/wujek/blob/build/reports/intTest
===== final config =====
test /home/wujek/blob/build/reports/test
intTest /home/wujek/blob/build/intTest
ので、tasks.withType()
ブロックトンに彼の位置は正しいと報告されていますが、結局はそうではありません。
このプロジェクトのtestSets
ブロック工事後tasks.withType()
ブロックを移動することに注意してください、私の本当の設定は、モード複雑ですしてください:私はmutlipleのモジュールがあり、根build.gradle
は、レポートの場所を設定するには、tasks.withType()
ブロックでsubprojects
ブロックを使用していますサブモジュールの1つが新しいテストセットを追加し、そのテストタスクのHTMLレポートの位置が間違っています。これを修正するには、テストセットを追加するサブモジュールで設定を繰り返す必要があります。
ここでは何が起こっていますか?なぜtasks.withType()
ブロックはconfigが動作すると言っているのですか?実際にはありませんか?
あなたの説明に基づいて、私は問題を修正することができました。私のセットアップは次のとおりです。メインbuild.gradleのsubprojectsブロックにtestSetsプラグインとwithType()ブロックがありました。 testSets {intTest}ブロックはサブモジュールに追加されます。サブモジュールはその後にのみ評価されます(したがって間違った設定)。ですから、あなたが提案したように注文するためには、サブプロジェクト{}ブロックにafterEvaluate {}ブロックを追加し、すべてのtasks.withType呼び出しがそこにあります。それは意味があります:すべてのサブプロジェクトが評価された後(そのプラグインがタスクを追加した後など)、メインビルドはそれらを集中的に構成します。 – wujek
ええ、その場合にはもう少し制限がありますし、afterEvaluateがおそらく最良の選択肢だと思います。 – ajoberstar