Compile - Required to compile and run the application. These also become transitive dependencies for any projects that list this project as a dependency.
Provided - Required to run the application, but not to compile. These do not become transitive dependencies but must be provided by a container in order for the application to run.
Runtime - Required to run the application, but not to compile. These are included in the runtime classpath (eg WEB-INF/lib) unless they are also flagged as optional.
Test - Required to compile and run unit tests on the application.