Architecture change to support configuration cache in a proper way #857
Description
This isn't a specific issue, rather an opportunity to talk about this plugin architecture.
Let's face it: this project has many issues related to the caching mechanism, like this and this. Now, after bumping Android Cache Fix Plugin and/or Gradle Doctor Plugin, I have the following logs for each module, caused by AboutLibraries behaviour:
Configuration 'debugUnitTestRuntimeClasspath' was resolved during configuration time.
This is a build performance and scalability issue.
See https://github.com/gradle/gradle/issues/2298
Run with --info for a stacktrace.
This is not something that is failing my build, but it is indicating that there is something basically wrong in the way this plugin works. The main issue is probably the way this plugin "injects" itself into every module from the top one, after they are evaluated. I've got a feeling that this approach will cause even more issues over time. Looking at recent Gradle development, it is focused on isolating modules logic from other modules logic, and AboutLibraries plugin is doing something completely opposite.
My idea is: this plugin should be applied in the same way every other multi-module plugin is applied, this is: by adding this plugin to every module separately. Look for example at Detekt Plugin, which works exactly this way, and afaik has no issues with cache. What do you think about this? It is possible for AboutLibraries to adopt the same approach?
I know collecting dependencies from the project is not an easy task, and I appreciate the work you have already done. I just want to still be able to use this library, while keeping all the dependencies up-to-date and benefit from the latest performance improvements. Unfortunately, this task is becoming harder and harder over time.