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