build– dependency that is only needed by the build processruntime– dependency that is needed to run the application, but not compile it e.g. JDBC implementation for specific database vendor. This would not typically be needed at compile-time because code depends only the JDBC API, rather than a specific implementation thereofcompile– dependency that is needed at both compile-time and runtime. This is the most common case
There are a couple of other dependency scopes:
test– dependency that is only needed by the tests, e.g. a mocking/testing libraryprovided– dependency that is needed at compile-time but should not be packaged with the app (usually because it is provided by the container). An example is the Servlet API