Important Task Types in Gradle

We have already seen than a Gradle task is an object and each task has a type. We also saw that the default type for all tasks is the DefaultTask. There are also other task types available with more specific methods and properties like Copy, Jar etc. We can also create our own custom task types if none of the built in types match our requirement.



Copies files from one directory to another and we can specify restrictions based on file patterns. Copy’s from, into and include properties can be used to specify source directory, destination directory and patterns of files to be included respectively. If destination directory doesn’t already exist, it will be created.


Create a folder source and create two files abc.txt and abc.xml and create the below task:

task copyXmlFiles(type: Copy) {

  from 'source'

  into 'destination'

  include '**/*.xml'


Now execute the below task as ‘gradle copyXmlFiles’ and you can see that a destination folder will be created with only abc.xml. You can change the script to include both xml and text files as:

include '**/*.xml', '**/*.txt'



Jar creates a Jar file.


I will use the same file and the same source folder Structure (src\main\java\com\javajee\ Build script for generating jar is:

apply plugin: 'java'

task createJar(type: Jar) {

  manifest {

    attributes firstKey: 'firstValue', secondKey: 'secondValue'


  archiveName = 'hello.jar'

  destinationDir = file("${buildDir}/jars")



When executed as ‘gradle createJar’, this will create the jar at the location ‘build\jars’.

Important thing to note here is that the property destinationDir expects an argument compatible with and the file() method available inside a Gradle build file, converts the string to a File object.



A JavaExec task can run a Java class with a main() method and is very useful in integrating command-line Java invocations into your build.


We will compile and execute our HelloWorld program written @ ‘Getting Started with Gradle Hello World Build in Windows OS’ using below build file:

apply plugin: 'java'

task runJava(type: JavaExec, dependsOn:[classes]) {

    main = 'com.javjee.HelloWorld'

    classpath = sourceSets.main.runtimeClasspath


When executed as ‘gradle runJava’, I get the output as:


:processResources UP-TO-DATE



Hello World


Total time: 4.684 secs



Book: Building and Testing with Gradle by Tim Berglund and Matthew McCullough.

Quick Notes Finder Tags

Activities (1) advanced java (1) agile (3) App Servers (6) archived notes (2) Arrays (1) Best Practices (12) Best Practices (Design) (3) Best Practices (Java) (7) Best Practices (Java EE) (1) BigData (3) Chars & Encodings (6) coding problems (2) Collections (15) contests (3) Core Java (All) (55) course plan (2) Database (12) Design patterns (8) dev tools (3) downloads (2) eclipse (9) Essentials (1) examples (14) Exception (1) Exceptions (4) Exercise (1) exercises (6) Getting Started (18) Groovy (2) hadoop (4) hibernate (77) hibernate interview questions (6) History (1) Hot book (5) http monitoring (2) Inheritance (4) intellij (1) java 8 notes (4) Java 9 (1) Java Concepts (7) Java Core (9) java ee exercises (1) java ee interview questions (2) Java Elements (16) Java Environment (1) Java Features (4) java interview points (4) java interview questions (4) javajee initiatives (1) javajee thoughts (3) Java Performance (6) Java Programmer 1 (11) Java Programmer 2 (7) Javascript Frameworks (1) Java SE Professional (1) JPA 1 - Module (6) JPA 1 - Modules (1) JSP (1) Legacy Java (1) linked list (3) maven (1) Multithreading (16) NFR (1) No SQL (1) Object Oriented (9) OCPJP (4) OCPWCD (1) OOAD (3) Operators (4) Overloading (2) Overriding (2) Overviews (1) policies (1) programming (1) Quartz Scheduler (1) Quizzes (17) RabbitMQ (1) references (2) restful web service (3) Searching (1) security (10) Servlets (8) Servlets and JSP (31) Site Usage Guidelines (1) Sorting (1) source code management (1) spring (4) spring boot (3) Spring Examples (1) Spring Features (1) spring jpa (1) Stack (1) Streams & IO (3) Strings (11) SW Developer Tools (2) testing (1) troubleshooting (1) user interface (1) vxml (8) web services (1) Web Technologies (1) Web Technology Books (1) youtube (1)