主なソースのいくつかを使用する独自のソース セットがあります。
sourceSets {
special {
java {
source main.java
}
}
コンパイルして正しく実行できることを確認しました。
configurations {
specialCompile.extendsFrom(compile)
specialRuntime.extendsFrom(runtime)
}
そして、それに対する私自身のテストタスクがあります:
task heavyTest(type: Test) {
useTestNG()
testClassesDir = project.sourceSets.special.output.classesDir
testSrcDirs += project.sourceSets.special.java.srcDirs.toList()
}
特別なソースには、クラス org.me.ImportantTests のテスト メソッドが含まれています
コンパイルは機能し、テストはEclipseでも正常に実行されますが、gradleからheavyTestタスクを実行しようとすると失敗します
01:18:23.360 [ERROR] [system.err] 01:18:23.357 [ERROR] [system.err] [TestNG] [ERROR] No test suite found. Nothing to run
01:18:23.488 [QUIET] [system.out] 01:18:23.486 [QUIET] [system.out] Usage: <main class> [options] The XML suite files to run
-d を指定して実行すると、gradle で ClassNotFoundException が発生したことがわかります。
01:18:23.559 [DEBUG] [TestEventLogger] Caused by:
01:18:23.559 [DEBUG] [TestEventLogger] org.gradle.api.GradleException: Could not load test class 'org.me.ImportantTests'.
01:18:23.560 [DEBUG] [TestEventLogger] at org.gradle.api.internal.tasks.testing.testng.TestNGTestClassProcessor.processTestClass(TestNGTestClassProcessor.java:67)
01:18:23.561 [DEBUG] [TestEventLogger] at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:49)
01:18:23.561 [DEBUG] [TestEventLogger] ... 21 more
01:18:23.561 [DEBUG] [TestEventLogger]
01:18:23.562 [DEBUG] [TestEventLogger] Caused by:
01:18:23.563 [DEBUG] [TestEventLogger] java.lang.ClassNotFoundException: org.me.ImportantTests
.class ファイルがクラスパスにないように見えます... しかし、testClassesDir を適切に設定すると、クラスは正確にあるべき場所 (/org/me/ImportantTests.class) になります! このタスクの何が問題になっていますか?