Engineering Full Stack Apps with Java and JavaScript
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.
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 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.
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
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.