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.

 

Copy

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.

Example

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

Jar creates a Jar file.

Example

I will use the same HelloWorld.java file and the same source folder Structure (src\main\java\com\javajee\HelloWorld.java). 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")

  from sourceSets.main.java

}

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 java.io.File and the file() method available inside a Gradle build file, converts the string to a File object.

 

JavaExec

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.

Example

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:

:compileJava

:processResources UP-TO-DATE

:classes

:runJava

Hello World

BUILD SUCCESSFUL

Total time: 4.684 secs

 

Reference

http://www.gradle.org

http://www.gradle.org/docs/current/javadoc/org/gradle/api/tasks/JavaExec.html

http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.JavaExec.html

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)