Not quadratic. The @guice namespace does not impose a new namespace for jar artifacts, it's just a place to store the generated rules.bzl file that, it turn, invokes native.maven_jar rules. These sit behind a require() function that basically is just a native.existing_rule guard to make sure it has not been loaded already.
The generated java_import looks like:
java_library(
name = 'compile',
exports = [
'@aopalliance_aopalliance//jar',
'@com_google_guava_guava//jar',
'@com_google_inject_guice//jar',
'@javax_inject_javax_inject//jar',
],
visibility = ['//visibility:public'],
)
Therefore, all rules call the same guava.
However, if a soy rule requires a different version of guava having a different sha1, the require function will notice that and complain. In that event, you'll have to manually resolve the issue by omitting the conflicting dependency. To do that, you can say `transitive_deps = ["omit:com.google.guava:guava:18.0", ...]` rather than `sha1:com.googleguava:guava:18.0`.