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
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()
}

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
  Get the Code