Purpose of buildscript block in Gradle
I am new to Gradle and I am reading the documentation but I don't understand some parts of it. One of these parts is connected with buildscript
block. What is its purpose?
If your build script needs to use external libraries, you can add them to the script's classpath in the build script itself. You do this using the buildscript() method, passing in a closure which declares the build script classpath.
buildscript { repositories { mavenCentral() } dependencies { classpath group: 'commons-codec', name: 'commons-codec', version: '1.2' } }
Ok but what is the difference with:
repositories {
mavenCentral()
}
dependencies {
compile group: 'commons-codec', name: 'commons-codec', version: '1.2'
}
For example, why it is necessary to use buildscript
?
The buildScript
block determines which plugins, task classes, and other classes are available for use in the rest of the build script. Without a buildScript
block, you can use everything that ships with Gradle out-of-the-box. If you additionally want to use third-party plugins, task classes, or other classes (in the build script!), you have to specify the corresponding dependencies in the buildScript
block.
- The global level
dependencies
andrepositories
sections list dependencies that required for building your source and running your source etc. - The
buildscript
is for thebuild.gradle
file itself. So, this would contain dependencies for say creating RPMs,Dockerfile
, and any other dependencies for running the tasks in all the dependentbuild.gradle
I appreciate Peter's answer... but it was not immediately obvious to me what the rest of the build script meant as emphasized in the answer and in the documentation.
Usually bringing in dependent functionality is for use in the Java program or whatever other program you might be writing. Bringing in Spring say, is not to be used in the build script, but in the Java program. Putting it in the buildscript
closure ensures that the dependencies are available for use within the gradle build itself. Not the output program.