에러
FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:hiltAggregateDepsDebug'. > A failure occurred while executing dagger.hilt.android.plugin.task.AggregateDepsTask$WorkerAction > 'java.lang.String com.squareup.javapoet.ClassName.canonicalName()'
...
..
해결책
// 모듈 수준의 build.gradle
hilt {
enableAggregatingTask = false
}
원인
최신버전(2.50)의 dagger-compiler 는 내부에서, square 사가 만든 JavaPoet 을 사용합니다. 좀 더 구체적으로는 Hilt를 사용하는 클래스 경로를 집계(Aggregate)하는 용도로 JavaPoet 를 사용하지만, java.lang.String com.squareup.javapoet.ClassName.canonicalName() 메서드를 찾지 못하는 것이 에러의 원인 입니다.
Hilt 는 클래스 경로를 집계하는 기능을 활성/비활성 할 수 있도록 옵션(enableAggregatingTask)을 제공합니다. 이 부분을 비활성화 화면 에러가 나오지 않게 할 수 있습니다. 정확히는 JavaPoet 를 사용하는 Dagger 의 Aggregating Task기능을 사용하지 않는 것입니다.
물론, Hilt의 Aggregating Task 기능을 사용하면 증분 컴파일 시간이 줄어드는 등의 이점이 있다고 합니다.
FYI
- Dagger 문서의 문서를 보면, Aggregating Task 역할을 알 수 있습니다.
- JavaPoet가 dagger 에서 사용하는 근거는, mvn repository 의 usage 에서 확인 가능합니다.(소스 코드를 추적하지 않아도)
- JavaPoet는 Java 소스 파일을 생성하기 위한 API입니다.
Reference
- https://dagger.dev/hilt/gradle-setup.html
- https://mvnrepository.com/artifact/com.squareup/javapoet
- https://whyprogrammer.tistory.com/641
맞는 해석인가... @.@