{"id":6965,"date":"2019-10-12T15:26:49","date_gmt":"2019-10-12T15:26:49","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=6965"},"modified":"2021-11-16T06:43:45","modified_gmt":"2021-11-16T06:43:45","slug":"gradle-tasks-are-exaplained-in-10-mins","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/gradle-tasks-are-exaplained-in-10-mins\/","title":{"rendered":"Gradle Tasks are exaplained in 10 mins!"},"content":{"rendered":"\n<p>Task in Gradle is a code that Gradle execute.<\/p>\n\n\n\n<p>Everything such a each type features is powered in Gradle using Plugin. Plugins add new tasks domain objects (e.g. SourceSet), conventions (e.g. Java source is located at src\/main\/java) as well as extending core objects and objects from other plugins. Thus, Gradle plugins define a set of tasks, DSL extensions, and conventions which can be reused across projects.<\/p>\n\n\n\n<p><strong>There are 2 types of plugins.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Script plugins: Which allows you declare your own tasks and their behaviours such similar to what we have been doing in Apache Ant. Ant is declarative scripting lang.<\/li><li>Binary plugins: Binary plugins follows a procedural approach in which each task&#8217;s behaviour is defined already such as (Goals in Maven). So, Binary plugins are classes that implement the Plugin interface and adopt a programmatic approach to manipulating the build. Binary plugins can reside within a build script, within the project hierarchy or externally in a plugin jar. Binary plugins are also 3 types.<br>\n&#8212; Core Binary Plugins such as (e.g. JavaPlugin)<br>\n&#8212; External Binary Plugins using community repos<br>\n&#8212; custom Plugins<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"490\" height=\"220\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/10\/gradle-tasks-project122.png\" alt=\"\" class=\"wp-image-6967\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/10\/gradle-tasks-project122.png 490w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/10\/gradle-tasks-project122-300x135.png 300w\" sizes=\"auto, (max-width: 490px) 100vw, 490px\" \/><\/figure>\n\n\n\n<p>Thus, plugins manages everything in Gradle sits on top of two basic concepts: <strong>projects and tasks<\/strong>. Each gradle build script would have<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"680\" height=\"415\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/10\/gradle-project-tasks.png\" alt=\"\" class=\"wp-image-6966\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/10\/gradle-project-tasks.png 680w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/10\/gradle-project-tasks-300x183.png 300w\" sizes=\"auto, (max-width: 680px) 100vw, 680px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Every Gradle build is made up of one or more projects.<\/li><li>Each project is made up of one or more tasks. <\/li><\/ul>\n\n\n\n<p><strong>A task, as the name suggests,<\/strong> is a representation of actions (default or custom) that need to be executed during the build process. For example, the compilation of Java code is started by a task. Tasks are defined in the project build script and can have dependencies with each other. this, A Task represents a single atomic piece of work for a build.<\/p>\n\n\n\n<p><strong>Task has following\u2026<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Has a Lifecycle<\/li><li>Has Properties<\/li><li>Has Actions &amp; Methods<\/li><li>Has Dependencies<\/li><li>Script Block<\/li><\/ul>\n\n\n\n<p><strong>Gradle Project Vs Gradle Tasks<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"638\" height=\"479\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/10\/gradle-projects-vs-tasks-1.jpg\" alt=\"\" class=\"wp-image-6969\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/10\/gradle-projects-vs-tasks-1.jpg 638w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/10\/gradle-projects-vs-tasks-1-300x225.jpg 300w\" sizes=\"auto, (max-width: 638px) 100vw, 638px\" \/><\/figure>\n\n\n\n<p><strong>Lets understand a Gradle Tasks!<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"515\" height=\"310\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/10\/gradle-task-tutorials-1.jpg\" alt=\"\" class=\"wp-image-6970\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/10\/gradle-task-tutorials-1.jpg 515w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/10\/gradle-task-tutorials-1-300x181.jpg 300w\" sizes=\"auto, (max-width: 515px) 100vw, 515px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"514\" height=\"290\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/10\/gradle-task-tutorials-2.jpg\" alt=\"\" class=\"wp-image-6971\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/10\/gradle-task-tutorials-2.jpg 514w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/10\/gradle-task-tutorials-2-300x169.jpg 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/10\/gradle-task-tutorials-2-355x199.jpg 355w\" sizes=\"auto, (max-width: 514px) 100vw, 514px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"760\" height=\"573\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/10\/gradle-task-tutorials-3.jpg\" alt=\"\" class=\"wp-image-6972\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/10\/gradle-task-tutorials-3.jpg 760w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/10\/gradle-task-tutorials-3-300x226.jpg 300w\" sizes=\"auto, (max-width: 760px) 100vw, 760px\" \/><\/figure>\n\n\n\n<p><strong>What are different ways to declare Gradle Tasks?<\/strong><\/p>\n\n\n\n<p><strong>Example 1 &#8211; Sample Task has description and action and method<\/strong><\/p>\n\n\n\n<script src=\"https:\/\/gist.github.com\/devops-school\/bc48852e6f2dc06674270474d326de01.js\"><\/script>\n\n\n\n<p><strong>Example 2 &#8211; Task has description and action and method<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">\ntask Task6 {\n  description <span class=\"hljs-string\">\"This is task 6\"<\/span>\n  dependsOn Task5\n  doFirst {\n    println <span class=\"hljs-string\">\"Task 6 - First\"<\/span>\n  }\n  doLast {\n    println <span class=\"hljs-string\">\"This is task 6 - version $projectVersion\"<\/span>\n  }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Example 3 &#8211; Task has dependsOn<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\">\n<span class=\"hljs-selector-tag\">Task6<\/span><span class=\"hljs-selector-class\">.dependsOn<\/span> <span class=\"hljs-selector-tag\">Task3<\/span>\n<span class=\"hljs-selector-tag\">Task5<\/span><span class=\"hljs-selector-class\">.dependsOn<\/span> <span class=\"hljs-selector-tag\">Task4<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Example 4. Your first build script<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\">#build.gradle<\/span>\ntask hello {\n    doLast {\n        println <span class=\"hljs-string\">'Hello world!'<\/span>\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"728\" height=\"546\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/10\/gradle-time-for-a-new-build-44-728.jpg\" alt=\"\" class=\"wp-image-6973\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/10\/gradle-time-for-a-new-build-44-728.jpg 728w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2019\/10\/gradle-time-for-a-new-build-44-728-300x225.jpg 300w\" sizes=\"auto, (max-width: 728px) 100vw, 728px\" \/><\/figure>\n\n\n\n<p><strong>What does -q do?<\/strong><br> Most of the examples in this user guide are run with the -q command-line option. This suppresses Gradle\u2019s log messages, so that only the output of the tasks is shown.<\/p>\n\n\n\n<p><strong>Example 5. Your first build script<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># build.gradle<\/span>\ntask upper {\n    doLast {\n        String someString = <span class=\"hljs-string\">'mY_nAmE'<\/span>\n        println <span class=\"hljs-string\">\"Original: $someString\"<\/span>\n        println <span class=\"hljs-string\">\"Upper case: ${someString.toUpperCase()}\"<\/span>\n    }\n}\n&gt; gradle -q upper<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Example 6. Using Groovy or Kotlin in Gradle\u2019s tasks<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">\n<span class=\"hljs-comment\">#build.gradle<\/span>\ntask upper {\n    doLast {\n        String someString = <span class=\"hljs-string\">'mY_nAmE'<\/span>\n        println <span class=\"hljs-string\">\"Original: $someString\"<\/span>\n        println <span class=\"hljs-string\">\"Upper case: ${someString.toUpperCase()}\"<\/span>\n    }\n}\n&gt; gradle -q upper<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Example 7. Using Groovy or Kotlin in Gradle\u2019s tasks<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">\n<span class=\"hljs-comment\"># build.gradle<\/span>\ntask count {\n    doLast {\n        <span class=\"hljs-number\">4.<\/span>times { <span class=\"hljs-keyword\">print<\/span> <span class=\"hljs-string\">\"$it \"<\/span> }\n    }\n}\n&gt; gradle -q count<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Example 8. Declaration of task that depends on other task<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">\n<span class=\"hljs-comment\">#build.gradle<\/span>\ntask hello {\n    doLast {\n        println <span class=\"hljs-string\">'Hello world!'<\/span>\n    }\n}\ntask intro {\n    dependsOn hello\n    doLast {\n        println <span class=\"hljs-string\">\"I'm Gradle\"<\/span>\n    }\n}\n\n&gt; gradle -q intro<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Example 9. Lazy dependsOn &#8211; the other task does not exist (yet)<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">\n<span class=\"hljs-comment\"># build.gradle<\/span>\ntask taskX {\n    dependsOn <span class=\"hljs-string\">'taskY'<\/span>\n    doLast {\n        println <span class=\"hljs-string\">'taskX'<\/span>\n    }\n}\ntask taskY {\n    doLast {\n        println <span class=\"hljs-string\">'taskY'<\/span>\n    }\n}\n&gt; gradle -q taskX<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Example 10. Dynamic creation of a task<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">build.gradle\n<span class=\"hljs-number\">4.<\/span>times { counter -&gt;\n    task <span class=\"hljs-string\">\"task$counter\"<\/span> {\n        doLast {\n            println <span class=\"hljs-string\">\"I'm task number $counter\"<\/span>\n        }\n    }\n}\n&gt; gradle -q task1<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Example 11. Accessing a task via API &#8211; adding a dependency. Once tasks are created they can be accessed via an API. For instance, you could use this to dynamically add dependencies to a task, at runtime. <\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">\n<span class=\"hljs-comment\"># build.gradle<\/span>\n<span class=\"hljs-number\">4.<\/span>times { counter -&gt;\n    task <span class=\"hljs-string\">\"task$counter\"<\/span> {\n        doLast {\n            println <span class=\"hljs-string\">\"I'm task number $counter\"<\/span>\n        }\n    }\n}\ntask0.dependsOn task2, task3\n&gt; gradle -q task0<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Example 12. Accessing a task via API &#8211; adding behaviour<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">\n<span class=\"hljs-comment\"># build.gradle<\/span>\ntask hello {\n    doLast {\n        println <span class=\"hljs-string\">'Hello Earth'<\/span>\n    }\n}\nhello.doFirst {\n    println <span class=\"hljs-string\">'Hello Venus'<\/span>\n}\nhello.configure {\n    doLast {\n        println <span class=\"hljs-string\">'Hello Mars'<\/span>\n    }\n}\nhello.configure {\n    doLast {\n        println <span class=\"hljs-string\">'Hello Jupiter'<\/span>\n    }\n}\n&gt; gradle -q hello\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Example 13. Accessing task as a property of the build script. There is a convenient notation for accessing an existing task. Each task is available as a property of the build script:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">\n<span class=\"hljs-comment\">#build.gradle<\/span>\ntask hello {\n    doLast {\n        println <span class=\"hljs-string\">'Hello world!'<\/span>\n    }\n}\nhello.doLast {\n    println <span class=\"hljs-string\">\"Greetings from the $hello.name task.\"<\/span>\n}\n\n&gt; gradle -q hello<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Example 13. Adding extra properties to a task. You can add your own properties to a task. To add a property named myProperty, set ext.myProperty to an initial value. From that point on, the property can be read and set like a predefined task property.<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">\n<span class=\"hljs-comment\">#build.gradle<\/span>\ntask myTask {\n    ext.myProperty = <span class=\"hljs-string\">\"myValue\"<\/span>\n}\n\ntask printTaskProperties {\n    doLast {\n        println myTask.myProperty\n    }\n}\n&gt; gradle -q printTaskProperties<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Example 15. Using methods to organize your build logic. Gradle scales in how you can organize your build logic. The first level of organizing your build logic for the example above, is extracting a method.<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">\n<span class=\"hljs-comment\"># build.gradle<\/span>\ntask checksum {\n    doLast {\n        fileList(<span class=\"hljs-string\">'.\/antLoadfileResources'<\/span>).each { File file -&gt;\n            ant.checksum(file: file, property: <span class=\"hljs-string\">\"cs_$file.name\"<\/span>)\n            println <span class=\"hljs-string\">\"$file.name Checksum: ${ant.properties&#91;\"<\/span>cs_$file.name<span class=\"hljs-string\">\"]}\"<\/span>\n        }\n    }\n}\n\ntask loadfile {\n    doLast {\n        fileList(<span class=\"hljs-string\">'.\/antLoadfileResources'<\/span>).each { File file -&gt;\n            ant.loadfile(srcFile: file, property: file.name)\n            println <span class=\"hljs-string\">\"I'm fond of $file.name\"<\/span>\n        }\n    }\n}\n\nFile&#91;] fileList(String dir) {\n    file(dir).listFiles({file -&gt; file.isFile() } <span class=\"hljs-keyword\">as<\/span> FileFilter).sort()\n}\n\n&gt; gradle -q loadfile\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Example 16. Defining a default task. Gradle allows you to define one or more default tasks that are executed if no other tasks are specified.<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">\n<span class=\"hljs-comment\">#build.gradle<\/span>\ndefaultTasks <span class=\"hljs-string\">'clean'<\/span>, <span class=\"hljs-string\">'run'<\/span>\n\ntask clean {\n    doLast {\n        println <span class=\"hljs-string\">'Default Cleaning!'<\/span>\n    }\n}\n\ntask run {\n    doLast {\n        println <span class=\"hljs-string\">'Default Running!'<\/span>\n    }\n}\n\ntask other {\n    doLast {\n        println <span class=\"hljs-string\">\"I'm not a default task!\"<\/span>\n    }\n}\n\n&gt; gradle -q<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<div class=\"epyt-gallery\" data-currpage=\"1\" id=\"epyt_gallery_54526\"><figure class=\"wp-block-embed wp-block-embed-youtube is-type-video is-provider-youtube epyt-figure\"><div class=\"wp-block-embed__wrapper\"><iframe loading=\"lazy\"  id=\"_ytid_88102\"  width=\"760\" height=\"427\"  data-origwidth=\"760\" data-origheight=\"427\" src=\"https:\/\/www.youtube.com\/embed\/?enablejsapi=1&#038;autoplay=0&#038;cc_load_policy=0&#038;cc_lang_pref=&#038;iv_load_policy=1&#038;loop=0&#038;rel=1&#038;fs=1&#038;playsinline=0&#038;autohide=2&#038;theme=dark&#038;color=red&#038;controls=1&#038;disablekb=0&#038;\" class=\"__youtube_prefs__  no-lazyload\" title=\"YouTube player\"  data-epytgalleryid=\"epyt_gallery_54526\"  allow=\"fullscreen; accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen data-no-lazy=\"1\" data-skipgform_ajax_framebjll=\"\"><\/iframe><\/div><\/figure><div class=\"epyt-gallery-list\"><div>Sorry, there was a YouTube error.<\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Task in Gradle is a code that Gradle execute. Everything such a each type features is powered in Gradle using Plugin. Plugins add new tasks domain objects (e.g. SourceSet), conventions (e.g. Java source is located at src\/main\/java) as well as extending core objects and objects from other plugins. Thus, Gradle plugins define a set of&#8230;<\/p>\n","protected":false},"author":1,"featured_media":6979,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","_joinchat":[],"footnotes":""},"categories":[2],"tags":[91,682,1076,1947,104],"class_list":["post-6965","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorised","tag-build","tag-gradle","tag-plugins","tag-tasks","tag-tutorials"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/6965","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=6965"}],"version-history":[{"count":2,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/6965\/revisions"}],"predecessor-version":[{"id":25386,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/6965\/revisions\/25386"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/6979"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=6965"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=6965"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=6965"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}