Robolectricでテスト実装しています。
sharedTestディレクトリに配置することでJVMでのテストも実機でのテストも可能ということでやっています。
しかしローカルJVMでのテストは正常に動作したのですが、実機でのInstrumented Testを実行すると以下のようなエラーがでてハマりました。
Duplicate class org.apache.maven.artifact.Artifact found in modules maven-ant-tasks-2.1.3.jar (org.apache.maven:maven-ant-tasks:2.1.3) and maven-artifact-2.2.1.jar (org.apache.maven:maven-artifact:2.2.1)
Duplicate class org.apache.maven.artifact.ArtifactStatus found in modules maven-ant-tasks-2.1.3.jar (org.apache.maven:maven-ant-tasks:2.1.3) and maven-artifact-2.2.1.jar (org.apache.maven:maven-artifact:2.2.1)
Duplicate class org.apache.maven.artifact.ArtifactUtils found in modules maven-ant-tasks-2.1.3.jar (org.apache.maven:maven-ant-tasks:2.1.3) and maven-artifact-2.2.1.jar (org.apache.maven:maven-artifact:2.2.1)
...略
./gradlew app:dependencies
で依存関係を調べてみましたが、そもそも maven-ant-task
も maven-artifact
も Robolectric内部でしか参照されていない状態でした。
バグかなーと思いシンプルなサンプルと見比べていたところ、
app/build.gradle
に以下の誤りを見つけました。
app/build.gradle
// 誤
androidTestImplementation "org.robolectric:robolectric:$robolectricVersion"
// 正
androidTestImplementation "org.robolectric:annotations:$robolectricVersion"
わかりますか? モジュール名の robolectric
と annotations
が違っていました。
ぐぐっても出てこないし時間かかりました。