akindyakov
12/20/2018, 11:31 AMexported_deps differ of deps only on linking stage. If there is a library lib_a which depends on lib_b and lib_b has an exported dependency on lib_c (a -> b -exported-> c), that means on linking stage lib lib_c will appear after either lib_a and lib_b. This doesn't make a lot of sense in terms of this linear dependency tree. But sometimes it necessary in order to resolve circular dependencies. So if there is no explicit necessity, better to use just deps.
Speaking of public headers availability there is no difference between deps and exported_deps.
There is an instrument to see the dependencies of some target - buck query 'deps(...)'. In case of `utils/json`:
% buck query 'deps(//osquery/utils/json:json)' --dot >deps.dot
% dot -Tpng -O deps.dot
% open deps.dot.png