This repository contains the basic project structure to use when in need of Java classes code usage in Gradle custom tasks.
- The following project structure must be used. The
buildSrc
folder must be present in the root of the project.
gradle-project
├── app
│ ├── build.gradle
│ └── src // some java code
│ └── ...
├── buildSrc
│ ├── build.gradle
│ ├── settings.gradle
│ └── src // common build logic
│ └── ...
├── settings.gradle
├── gradle
├── gradlew
└── gradlew.bat
- The
buildSrc
should contain the task logic. In our case -CustomGradleTask.java
. The logic may be split into multiple classes. The task in real life will probably be much more complex - check Gradle documentation for more information.
import org.gradle.api.DefaultTask;
import org.gradle.api.tasks.TaskAction;
public abstract class CustomGradleTask extends DefaultTask {
@TaskAction
public void run() {
System.out.println("Running some custom default task ...");
}
}
- The
app
module (or the module where your task has to be applied) should contain thebuild.gradle
file with the following content. The dependency on build or any other task should be defined here.
plugins {
id 'java'
}
group = 'org.studies'
version = '1.0-SNAPSHOT'
tasks.register('customTask', CustomGradleTask) {
}
tasks.build.dependsOn(customTask)
repositories {
mavenCentral()
}
dependencies {
testImplementation platform('org.junit:junit-bom:5.10.0')
testImplementation 'org.junit.jupiter:junit-jupiter'
}
test {
useJUnitPlatform()
}
If I now run build
, I'll see the output of the custom task.
$ ./gradlew build