...
- provided dependencies should be used only for APIs which are supplied by the run-time container.
- compile dependencies should be used for all other modules whose APIs are referenced by the source code.
- If a compile dependency is used by optional code in a project like java-support, the dependency should be compile but marked as optional. Client projects which require the optional functionality must manually include the missing transitive dependency with runtime scope if they do not already require it at compile scope.
- If a module is required to be present at run time but is not referenced by the source code, it is a runtime scope dependency.
- If a module is not required by the main source code but is required for testing, it is a test scope dependency.
...