xetra11
xetra11

Reputation: 8837

Kotlin source files in "src/main/kotlin" can't resolve other gradle module classes

I have a multimodule project with gradle that is working fine for a while now. Now I started to refactor my old java code and used some kotlin classes for it. Unfortunately I have a dependency resolving problem with this approach.

So I assured that a dependency :domain is properly resolved with gradle. It does work with all source files in src/main/java if they are .java files. However when using it in src/main/kotlin they do not resolve. This is true only for project module dependencies. External libraries do work in both folder structures. Placing my .kt files into src/main/java is not working either.

So this is the failing module's gradle.build.kts file:

group = "com.my.company"

plugins {
    kotlin("jvm")
}
tasks.compileKotlin {
    kotlinOptions {
        jvmTarget = "11"
    }
}
tasks.compileTestKotlin {
    kotlinOptions {
        jvmTarget = "11"
    }
}

dependencies {
    implementation(kotlin("stdlib"))
    implementation(project(":domain"))
    implementation("org.json:json")
    implementation("commons-io:commons-io")
}

And this is the build.gradle.kts of the :domain module:

plugins {
    id("org.openrepose.gradle.plugins.jaxb") version "2.5.0"
}

group = "com.my.company"

tasks.checkstyleMain {
    exclude("**/gen/**")
}
dependencies {
    implementation("org.springframework.boot:spring-boot-starter")
    implementation("org.springframework.boot:spring-boot-starter-batch")
    implementation("org.hsqldb:hsqldb")
    implementation("org.springframework:spring-oxm")
    implementation("org.apache.commons:commons-lang3")
    implementation("org.json:json")

    implementation("org.springframework.boot:spring-boot-starter-json")

    annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
    implementation("org.springframework.boot:spring-boot-starter-amqp")
    implementation("org.springframework.boot:spring-boot-starter-batch")
    implementation("com.fasterxml.jackson.core:jackson-databind")
    implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310")
    implementation("javax.annotation:javax.annotation-api")
    implementation("org.apache.commons:commons-text")
    implementation("commons-io:commons-io")
    implementation("org.springframework.cloud:spring-cloud-gcp-starter-logging")
    implementation("org.springframework.cloud:spring-cloud-gcp-starter-trace")

    implementation("javax.activation:activation")
    implementation("javax.xml.bind:jaxb-api")
    implementation("com.sun.xml.bind:jaxb-impl")
    implementation("org.springframework.cloud:spring-cloud-stream")

    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testImplementation("org.springframework.amqp:spring-rabbit-test")
    testImplementation("org.springframework.amqp:spring-rabbit-junit")

    jaxb("com.sun.xml.bind:jaxb-xjc")
    jaxb("com.sun.xml.bind:jaxb-impl")
    jaxb("javax.xml.bind:jaxb-api")
    jaxb("javax.activation:activation")
}

sourceSets {
    main {
        java {
            srcDirs("src/gen/java")
        }
    }
}

jaxb {
    bindingsDir = "src/main/resources/bindings"
    bindings = listOf("bindings.xjb")
    xsdDir = "src/main/resources/xsd"

    xjc {
        accessExternalSchema = "file"
        generateEpisodeFiles = false
        destinationDir = "src/gen/java"
    }
}

tasks.clean {
    delete("src/gen")
}

tasks.compileJava {
    dependsOn("xjc")
}

I have no idea why it is not working. May it be that this jaxb generator plugin stuff might cause some issues here? Just a guess.

EDIT: root gradle.build.kts : https://pastebin.com/nNTx1fKe

Upvotes: 0

Views: 1651

Answers (1)

madhead
madhead

Reputation: 33392

Make sure to apply Kotlin JVM plugin to the :domain module. Note that kotlin("jvm") version "1.3.61" in your root gradle.build.kts does not apply it to subprojects! You should have something like:

subprojects {
    apply<KotlinPlatformJvmPlugin>()

    tasks {
        withType<KotlinCompile> {
            kotlinOptions.jvmTarget = "11"
        }
    }
}

Upvotes: 1

Related Questions