What's the difference between build
, runtime
, and compile
, in BuildConfig.groovy
(1.3.7)
grails.project.dependency.resolution = {
plugins {
build "acme:acme-cache:latest.integration"
}
dependencies {
build "com.foo.bar:foobar:1.0.5"
runtime "org.apache.httpcomponents:httpclient:4.0.3"
compile("com.thoughtworks.xstream:xstream:1.3.1")
}
}
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 caseThere 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 APIA couple grails commands help illustrate the difference. Consider
grails run-app
andgrails compile
.grails compile
is the compile step and will include compile-time dependencies.grails run-app
is the run step and will include runtime dependencies. Build dependencies are anything that you might need to run any of these commands, for example, a custom script that hooks into some build events.So you would pick the one that best fits when you need to be certain the dependency is included.
It seems the 2 previous answers conflict on the distinction between compile and build. I believe that build is the scope that includes
grails compile
andgrails run-app
, while compile is just the former.From Grails 3, dependencies are managed by Gradle. The
grails-app/conf/BuildConfig.groovy
file has been replaced by thebuild.gradle
file in the project's root.The Grails user guide explain how to set grails depencies with gradle and refers to the related Gradle documentation for more details about this topic.