When classifiers are used as part of dependency specifications, it's important to be able to select just the classified artifact. Unfortunately, in the current json, dependencies don't specify classifiers, so it isn't possible to just get one of the artifacts for a dependency when a classifier is required.
This patch introduces maven style artifact prefixes in order to include classifier and packaging information in the coordinates. By doing that, we can use them as keys in dependency lists more easily and it allows consumers of the json to treat those dependency keys as mostly opaque ids rather than having to parse them.
Addresses #743
* changes
* changes to Attributes
* make changes
* add test and fix bug
* add more tests
* fix failing tests
* fix parentheses
* remove comments I added and add test that's guarenteed not to exist in a repo
* remove Attributes third parameter and refactor Parse's moduleVersionConfig to return a tuple of Dependency and a Map of String to String representing extra parameters for the dependency
* update some return types and methods in the Helper class
* return FallbackDependenciesRepository back to original state
* refactor helper
* remove url from attributes
* fix tests and add cache to extra in build.sbt
* remove FallbackDepsRepo from sbt-coursier
* add variable for url and call encode in tests
* update tests and helper to have proper behavior
* remove setting deps to intransitive when url is present and add two tests
* add more tests, implement @wisechengyi's comments
* fix nits
* update ParseTests because some failed
* fix tests
* incorporate feedback from @alexarchambault and @wisechengyi
* update ParseTests to check for returned error vs thrown error
* remove one test that is covered in ParseTests
* fix nits
* add back deleted brackets
* return errors in Left without using return statement
* revert change because it's broken
* fix some positional things
* add return statement or else error won't be processed
* fix nits. thanks @wisechengyi
* Remove return statements
Major change:
* Identified hotspot in `JsonElem.hashCode` because it hashes children recursively. Hence simplified hashing scheme, reducing CPU time on `JsonReport.apply()` from 64.7 sec to 2.5 sec
Other minor changes:
* Make `JsonRequirement` use immutable classes
* Simplify `JsonRequirement` composition
Ensure everything work fine again with those (things went bad at
1.0.0-RC1, because of the use of directory listings, that may not be
exhaustive in proxies - or may be just empty, e.g. currently with nexus 3)
This commit adds support for a `bintray-ivy:` repository prefix to the `--repository`
flag in the cli. This option is equivalent to the `Resolver.bintrayIvyRepo` helper in sbt.
With this new helper, it's possible to write `-r bintray-ivy:scalameta/maven/` instead of
```
-r ivy:https://dl.bintray.com/scalameta/maven/[organisation]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
```