So in the current age of Software Engineering, code reuse is so important that modern languages have some form of dependency management. Dartlang achieves this through the use of Pub. However, pub has taken the approach of using shared dependencies, meaning that if 2 or more libraries have a common dependency, that dependency will be downloaded once and the libraries share it... This of course has led to a very vexing problem.
This is something that happens extremely often. You are working on a project that requires n+1 libraries. It is fairly common for some of the libraries to have the same dependency. It is also very likely that they depend on DIFFERENT versions of said dependency. It is so bad, that pub had to give you the option to override dependencies. You'd think that one would maybe just use the latest version of said library, but code is always in flux so different versions tend to have breaking changes...
Pub tries to work out a compromise itself, but it usually just gives up saying it can't do it, leaving you to manually try something with the overrides mentioned above. Often times you spend more time trying to mix and match versions of your libraries till you get a pair that will seemingly play nice with each other. It is also extremely vexing when an update was pushed to one library that fixes a bug that was affecting your project, but you don't want to update because that would change the needed versions of the shared dependency and thus would break your other libraries >.>
A good example of this crap is with Polymer and Angular. I know that their code is still in flux, but I can tell you that alot of people would love to use them both together! Polymer and Angular a two independent projects and it would be very unreasonable to expect their respective communities to make sure that all their versions remain compatible with each other.
I come from a Java background. Java does not have built in dependency management. However, the community made two projects that are more or less industry needed if you want to make a large java project. They are Maven and ivy. Why this problem doesn't exist over on their side is because they decided that each dependency should be isolated from the others. If pub were to also take that approach, this problem would disappear over night!
Sorry for the rant, but right now I am asking, is there a way to make pub behave more like Maven or Ivy? If not, is there a third-party dependency manager that does same?