Axon is not using "jakarta" namespace when upgraded to 4.6 for Spring boot 3, and JDK17

I am trying to migrate our application which uses Axon 4.1, with Spring boot 2, and JDK11 to Spring boot 3, with JDK17.

During the upgrade i faced an issue in the build, where Axon’s internal classes like AbstractEventEntry, were using javax.persistence.MappedSuperclass.

So when i researched a bit i found this article that the support for “jakarta” namespace is added starting from Axon version 4.6.

But when i used 4.6, i still get the below same error, where Axon’s internal classes were using “javax*” rather “jakarta*”.

> Task :compileJava FAILED
error: cannot access MappedSuperclass
  class file for javax.persistence.MappedSuperclass not found

What am i missing here, appreciate if anyone could share some insights.

Below is how my POM class looks like, and i use gradle version 8.5 .

buildscript {
    ext {
        springVersion = '6.1.3'
        springBootVersion = '3.2.0'
        springSecurityVersion = '6.2.0'
        junitVersion = "5.3.1"
        axonVersion='4.6.0'
        tomcatVersion='9.0.75'
        oracleVersion = '19.6.0.0'
    }
    repositories {
        mavenCentral()
        mavenLocal()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.6.2"
        classpath "org.junit.platform:junit-platform-gradle-plugin:1.2.0"
        classpath "org.owasp:dependency-check-gradle:$owaspVersion"
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'org.sonarqube'
apply plugin: 'org.junit.platform.gradle.plugin'
apply plugin: "org.owasp.dependencycheck"

apply from: "${rootDir}/build-support/packaging.gradle"
apply from: "${rootDir}/contracts/build.gradle"

group = 'com.aconex.relateditems'
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17

repositories {
    mavenCentral()
    mavenLocal()
    maven {
        name "cegbuacx-public"
        url "https://artifacthub-phx.oci.oraclecorp.com/cegbuacx-public"
    }
}

dependencies {

    implementation ('xerces:xercesImpl:2.12.2')
    implementation 'org.glassfish.jaxb:jaxb-runtime:4.0.2'
    implementation 'org.glassfish.corba:glassfish-corba-orb:4.2.4'
    implementation 'javax.transaction:javax.transaction-api:1.3'
    implementation 'javax.annotation:javax.annotation-api:1.3.2'
    implementation('com.sun.xml.ws:jaxws-ri:4.0.1') {
        exclude module: 'txw2'
        exclude module: 'sdo-eclipselink-plugin'
    }

    implementation ("org.axonframework:axon-spring-boot-starter:$axonVersion"){
        exclude group: 'org.axonframework', module: 'axon-server-connector'
    }

    implementation (group: 'com.aconex', name: 'shared-secrets-implementation', version: '2.0.404') {
        exclude group: 'com.fasterxml.woodstox', module: 'woodstox-core'
    }

    implementation group: 'org.springdoc', name:'springdoc-openapi-ui', version: '1.6.14'
    runtimeOnly  group: 'com.oracle.database.jdbc', name: 'ojdbc8', version: "$oracleVersion"
    runtimeOnly  group: 'com.oracle.database.security', name: 'oraclepki', version: "$oracleVersion"
    runtimeOnly  group: 'com.oracle.database.security', name: 'osdt_cert', version: "$oracleVersion"
    runtimeOnly  group: 'com.oracle.database.security', name: 'osdt_core', version: "$oracleVersion"
    implementation("org.springframework.boot:spring-boot-starter-data-jpa:$springBootVersion")
    implementation group: 'org.yaml', name: 'snakeyaml', version: '2.0'
    implementation group: 'com.aconex.linkingservice', name: 'dtos', version: '0.2.1'
    implementation group: 'org.springframework.boot', name: 'spring-boot-starter-actuator', version: "$springBootVersion"
    implementation group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-joda', version: '2.15.2'
    implementation group: 'com.aconex', name: 'secrets-management-vault-spring', version:'1.5.133'
    implementation group: 'com.aconex', name: 'secrets-management-simple', version: '1.5.133'
    implementation group: 'com.aconex', name: 'secrets-management-tls-common', version: '1.5.133'
    implementation group: 'com.fasterxml.woodstox', name: 'woodstox-core', version: '6.5.1'
    implementation group: 'com.aconex', name: 'spring-pcp-monitoring', version: '0.3.3'
    implementation group: 'net.bull.javamelody', name: 'javamelody-spring-boot-starter', version: '1.79.0'
    implementation group: 'com.aconex', name: 'babylon-private-api-client-common', version: '0.884'
    implementation group: 'org.apache.httpcomponents', name:'httpclient', version: '4.5.13'
    implementation group: 'com.aconex', name: 'trusted-api-client', version: '1.1.57'
    implementation group: 'org.jolokia', name: 'jolokia-core', version: '1.6.1'
    implementation group: 'org.jolokia', name: 'jolokia-spring', version: '1.6.1'


    implementation('org.springframework.boot:spring-boot-starter-web')
    implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.26'
    annotationProcessor 'org.projectlombok:lombok:1.18.26'

    implementation group: 'com.mikesamuel', name: 'json-sanitizer', version: '1.2.2'
    implementation group: 'com.thoughtworks.xstream', name: 'xstream', version: '1.4.20'
    implementation group: 'org.burningwave', name: 'core', version: '12.64.1'
    implementation group: 'com.google.guava', name: 'guava', version: '32.0.1-jre'
    implementation group: 'org.reflections', name: 'reflections', version: '0.9.11'
    implementation group: 'org.apache.logging.log4j', name: 'log4j-to-slf4j', version: '2.17.1'
    implementation group: 'org.apache.commons', name: 'commons-configuration2', version: '2.8.0'
    implementation group: 'commons-beanutils', name: 'commons-beanutils', version: '1.9.4'
    implementation ('org.dom4j:dom4j:2.1.3'){
        exclude module: 'pull-parser'
    }
    implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.20.0'
    implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.20.0'
    implementation group: 'org.apache.logging.log4j', name: 'log4j-1.2-api', version: '2.20.0'
    implementation group: 'org.apache.tomcat.embed', name: 'tomcat-embed-websocket', version: "$tomcatVersion"
    implementation group: 'org.apache.tomcat.embed', name: 'tomcat-embed-core', version: "$tomcatVersion"
    implementation group: 'org.apache.tomcat', name: 'tomcat-annotations-api', version: "$tomcatVersion"
    implementation group: 'org.apache.tomcat.embed', name: 'tomcat-embed-el', version: "$tomcatVersion"

    implementation group: 'org.springframework',name: 'spring-core', version: "$springVersion"
    implementation group: 'org.springframework',name: 'spring-web', version: "$springVersion"
    implementation group: 'org.springframework',name: 'spring-webmvc', version: "$springVersion"
    implementation group: 'org.springframework',name: 'spring-beans', version: "$springVersion"
    implementation group: 'org.springframework',name: 'spring-context', version: "$springVersion"
    implementation group: 'org.springframework',name: 'spring-context-support', version: "$springVersion"
    implementation group: 'org.springframework',name: 'spring-expression', version: "$springVersion"
    implementation group: 'org.springframework',name: 'spring-tx', version: "$springVersion"
    implementation group: 'org.springframework',name: 'spring-aop', version: "$springVersion"
    implementation group: 'org.springframework',name: 'spring-aspects', version: "$springVersion"
    implementation group: 'org.springframework',name: 'spring-jcl', version: "$springVersion"
    implementation group: 'org.springframework',name: 'spring-jdbc', version: "$springVersion"
    implementation group: 'org.springframework',name: 'spring-orm', version: "$springVersion"
    implementation group: 'org.springframework',name: 'spring-test', version: "$springVersion"
    implementation group: 'org.springframework.retry',name: 'spring-retry', version: '1.3.4'

    implementation group: 'org.springframework.security', name: 'spring-security-config', version: "$springSecurityVersion"
    implementation group: 'org.springframework.security', name: 'spring-security-core', version: "$springSecurityVersion"
    implementation group: 'org.springframework.security', name: 'spring-security-test', version: "$springSecurityVersion"
    implementation group: 'org.springframework.security', name: 'spring-security-web', version: "$springSecurityVersion"
    implementation group: 'org.springframework.security', name: 'spring-security-crypto', version: "$springSecurityVersion"

    implementation group: 'ch.qos.logback', name: 'logback-core', version: '1.2.12'


    implementation group: 'io.pcp.parfait', name: 'dxm', version: '0.5.1'
    implementation group: 'io.pcp.parfait', name: 'parfait-core', version: '0.5.1'
    implementation group: 'io.pcp.parfait', name: 'parfait-jdbc', version: '0.5.1'
    implementation group: 'io.pcp.parfait', name: 'parfait-jmx', version: '0.5.1'
    implementation group: 'io.pcp.parfait', name: 'parfait-pcp', version: '0.5.1'

    runtimeOnly('com.aconex:babylon-contracts:+') {
        exclude group: 'org.apache.logging.log4j', module: 'log4j-core'
        exclude group: 'org.apache.logging.log4j', module: 'log4j-1.2-api'
        exclude group: 'org.liquibase'
    }
    runtimeOnly  group: 'com.aconex.linkingservice', name: 'linking-service-contract', version: '+', changing: true


    testImplementation group: 'org.axonframework', name: 'axon-test', version: "$axonVersion"
    implementation group: 'net.minidev', name: 'json-smart', version: '2.4.10'
    testImplementation('org.junit.jupiter:junit-jupiter-api:5.3.1')
    testImplementation('org.junit.jupiter:junit-jupiter-params:5.3.1')
    testRuntimeOnly('org.junit.jupiter:junit-jupiter-engine:5.3.1')
    testImplementation 'org.mockito:mockito-core:3.11.2'
    testImplementation('org.mockito:mockito-junit-jupiter:2.18.3')
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'junit', module: 'junit'
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
    testImplementation 'org.springframework.security:spring-security-test'
    configurations {
        implementation {
            exclude group: 'com.google.j2objc', module:'j2objc-annotations'
            exclude group: 'com.github.spotbugs', module:'3.1.0-RC7'
            exclude group: 'com.google.errorprone', module:'error_prone_annotations'
            exclude group: 'org.checkerframework', module:'checker-qual'
            exclude group: 'org.codehaus.mojo', module:'animal-sniffer-annotations'
        }
    }
}

sonarqube {
    properties {
        property "sonar.host.url", "http://build.engr.acx:9000/sonar"
    }
}

dependencyCheck {
    format = 'ALL'
    suppressionFile = "${rootDir}/owasp/suppressions.xml"
    failBuildOnCVSS = 0
}

task gruntStage(type: Exec) {
    println 'Task :gruntStage: Executing build.sh to build ui(webapp-src).'
    commandLine 'sh', './build.sh'

}

task buildui(type: Copy) {
    dependsOn gruntStage
    println 'Task :buildui: Copying static resources to public'
    from('webapp-src/stage/rsrc')
    into('src/main/resources/public')

}

springBoot {
    buildInfo {
        properties {
            additional = [
                    'srcVersion' : "${buildInformation.tag}"
            ]
        }
    }
}

processResources.dependsOn buildui

Hi,

I would suggest to use at least Axon Framework 4.7 (4.9 is current, why not use that?)

There is an upgrade guide for this: Upgrading to 4.7 - Axon Reference Guide and it works, if you pay attention to the changed packages.

Hope this helps,

Cheers,

Simon