plugins {
id 'org.apache.grails.gradle.grails-web' version "${grailsVersion}"
id 'org.apache.grails.gradle.grails-gsp' version "${grailsVersion}"
}
group = 'example.grails'
version = '0.1.0'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.apache.grails:grails-dependencies-starter-web'
implementation 'org.apache.grails:grails-data-hibernate5'
implementation 'org.apache.grails:grails-data-hibernate5-spring-boot'
implementation 'org.apache.grails:grails-datasource'
runtimeOnly 'com.h2database:h2'
testImplementation 'org.apache.grails:grails-testing-support-web'
testImplementation 'org.apache.grails:grails-testing-support-datamapping'
}
tasks.named('test') {
useJUnitPlatform()
}
2 Add JobRunr and Jackson
Grails 8 runs on Spring Boot 4, so use JobRunr’s Spring Boot 4 starter. The JobRunr Grails guide documents this starter family, and the Maven Central artifact identifies the selected GA release.
The initial build has no JobRunr runtime dependency:
initial/build.gradle
The complete build adds the Boot 4 starter and explicit jackson-databind:
complete/build.gradle
plugins {
id 'org.apache.grails.gradle.grails-web' version "${grailsVersion}"
id 'org.apache.grails.gradle.grails-gsp' version "${grailsVersion}"
}
group = 'example.grails'
version = '0.1.0'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.apache.grails:grails-dependencies-starter-web'
implementation 'org.apache.grails:grails-data-hibernate5'
implementation 'org.apache.grails:grails-data-hibernate5-spring-boot'
implementation 'org.apache.grails:grails-datasource'
implementation "org.jobrunr:jobrunr-spring-boot-4-starter:${jobrunrVersion}"
implementation 'com.fasterxml.jackson.core:jackson-databind'
runtimeOnly 'com.h2database:h2'
testImplementation 'org.apache.grails:grails-testing-support-web'
testImplementation 'org.apache.grails:grails-testing-support-datamapping'
}
tasks.named('test') {
useJUnitPlatform()
}
bootRun {
jvmArgs '-Dgrails.env=development'
sourceResources sourceSets.main
}
The starter supplies Jackson version constraints but not an application Jackson Databind runtime dependency. Add com.fasterxml.jackson.core:jackson-databind explicitly so JobRunr can create its job mapper. Keep the version managed by the Grails dependency platform rather than pinning a competing version.
The version delta is visible in the two Gradle property files:
initial/gradle.properties
grailsVersion=8.0.0-M5
org.gradle.caching=true
org.gradle.jvmargs=-Dfile.encoding=UTF-8 -Xmx1g
complete/gradle.properties
grailsVersion=8.0.0-M5
jobrunrVersion=8.8.1
org.gradle.caching=true
org.gradle.jvmargs=-Dfile.encoding=UTF-8 -Xmx1g