Hi,
We, rules_scala, have a strict-deps solution with a compiler plugin which is both naive (many false negatives) and less performant (compilation action has all transitive ijars as inputs).
We're POCing a different approach which only passes the direct jars and using an external tool to scrape the error messages, extract the needed class and then needed label.
This is showing great success so far in both fronts but I know that often the compiler needs the first level transitive (dependency of dependency) even if it isn't used explicitly (usage of interface which extends interface for example).
I remember, maybe in correctly, that java rules have the following characteristics:
1. They try with direct + one level (limited classpath?) before falling back to entire transitive classpath
2. They try very hard to only fail if they conclude that the usage is "real" and not just because the compiler needed it (see case above).
My questions are:
1. Anyone know how this decision of "real" usage works? Would love links to read and think.
2. Anyone know how the direct + one level works? I think we might need that as well.
The big reason I'm concerned is that in a many repo setting having many false negative strict-deps can cause many breakages of peer repositories when someone just changes implementation (exception now extends another exception)
Thanks in advance,
Ittai