Dependencies may be inclusions or requirements. Requirements should not be exposed in the public API of a project. Only inclusions affect the build hash of a phase; changing a requirement shouldn't change the hash of downstream projects. Requirements can be shaded with Umbrageous automatically, and hence, different versions can coexist on the same classpath.
Conversely, if a project's dependencies contain two non-equal inclusions, then these must be resolved.
If a dependency is both an inclusion and a requirement, then it should be treated as an inclusion.
Dependencies may be inclusions or requirements. Requirements should not be exposed in the public API of a project. Only inclusions affect the build hash of a phase; changing a requirement shouldn't change the hash of downstream projects. Requirements can be shaded with Umbrageous automatically, and hence, different versions can coexist on the same classpath.
Conversely, if a project's dependencies contain two non-equal inclusions, then these must be resolved.
If a dependency is both an inclusion and a requirement, then it should be treated as an inclusion.