IntershopCommunicationsAG/jaxb-gradle-plugin

Genereated classes can not be resolved

Opened this issue · 1 comments

If I generate Java classes from xsd files the resulting classes are not found. During compilation I get Unresolved reference: MyClass errors.

The configuration is like the following:

plugins {
    kotlin("jvm") version "1.3.72"
    kotlin("plugin.spring") version "1.3.72"
    id("com.intershop.gradle.jaxb") version "4.3.0"
}

jaxb {
    javaGen {
        create("example1") {
            language = "XMLSCHEMA"
            schemas = layout.files(
                "src/main/generation/example1a.xsd",
                "src/main/generation/example1b.xsd"
            )
            bindings = layout.files("src/main/generation/example1.xjb")
        }
        create("example2") {
            language = "XMLSCHEMA"
            schemas = layout.files("src/main/generation/example2.xsd")
            bindings = layout.files("src/main/generation/example2.xjb")
        }
    }
}

sourceSets {
    main {
        java {
            srcDirs += file("generated/jaxb/java")
        }
    }
}

All class files are generated as expected. They are located under "build/generated/jaxb/java".

Following the documentation they should be added to the source set "main" automatically, but even adding them explicitly with the sourceSets block doesn't help.

Everything was working with the plug-in version 4.0.0.

The problem is that the plugin does not support Kotlin properly. The generated source files are only added to the Java sourceset "main" and not to the Kotlin sourceset "main". In addition, the generation of the classes should be done before the task "compileKotlin".

Something like this:

plugins {
    id("com.intershop.gradle.jaxb") version "6.0.0"
}

jaxb {
     // generate java code from schema
     javaGen {
        //generates a 'project' schema file from existing java code
        register("name") {
            schema = file("schema.xsd")
            binding = file("binding.xjb")
        }
    }
}

sourceSets {
    main {
        kotlin {
            srcDir("${project.buildDir}/generated/jaxb/java/name")
        }
    }
}

tasks.compileKotlin {
   dependsOn("jaxbJavaGenName")
}