Совмещение Kotlin и Java в одном проекте

Добрый день. При попытке сделать имплементацию java-интерфейса в kotlin-классе билд падает, возникает ошибка java.lang.NoClassDefFoundError. В проекте java исходники находятся в директории src.main.java, kotlin исходники в директории src.main.kotlin. В чистом gradle проекте (не jmix) таких проблем не возникает. Буду признателен любой помощи.
Привожу лог ошибки.

Task :compileKotlin
‘compileJava’ task (current target is 17) and ‘compileKotlin’ task (current target is 1.8) jvm target compatibility should be set to the same Java version.
w: C:\Users\test2\IdeaProjects\pplc-server\src\main\kotlin\ru\voidelectrics\pplcserver\screen\login\LoginScreen.kt: (59, 24): Parameter ‘event’ is never used
w: C:\Users\test2\IdeaProjects\pplc-server\src\main\kotlin\ru\voidelectrics\pplcserver\screen\login\LoginScreen.kt: (100, 41): Parameter ‘event’ is never used
w: C:\Users\test2\IdeaProjects\pplc-server\src\main\kotlin\ru\voidelectrics\pplcserver\screen\main\MainScreen.kt: (33, 45): Parameter ‘event’ is never used
w: C:\Users\test2\IdeaProjects\pplc-server\src\main\kotlin\ru\voidelectrics\pplcserver\screen\main\MainScreen.kt: (45, 21): Parameter ‘event’ is never used
w: C:\Users\test2\IdeaProjects\pplc-server\src\main\kotlin\ru\voidelectrics\pplcserver\screen\user\UserEdit.kt: (49, 22): Parameter ‘event’ is never used
w: C:\Users\test2\IdeaProjects\pplc-server\src\main\kotlin\ru\voidelectrics\pplcserver\screen\user\UserEdit.kt: (57, 21): Parameter ‘event’ is never used
w: C:\Users\test2\IdeaProjects\pplc-server\src\main\kotlin\ru\voidelectrics\pplcserver\screen\user\UserEdit.kt: (77, 38): Parameter ‘event’ is never used
w: C:\Users\test2\IdeaProjects\pplc-server\src\main\kotlin\ru\voidelectrics\pplcserver\screen\user\UserEdit.kt: (79, 75): Type mismatch: inferred type is String? but String was expected
Enhancing entities in root project ‘pplc-server’ for source set ‘main’
Project entities:
JPA: [ru.voidelectrics.pplcserver.entity.User];
DTO: [];
Project converters: [].
Running EclipseLink enhancer in root project ‘pplc-server’ for source set ‘main’
Exception in thread “main” java.lang.NoClassDefFoundError: FooIn
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:524)
at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:427)
at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:421)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:420)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:587)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
at org.eclipse.persistence.tools.weaving.jpa.StaticWeaveProcessor.process(StaticWeaveProcessor.java:283)
at org.eclipse.persistence.tools.weaving.jpa.StaticWeaveProcessor.performWeaving(StaticWeaveProcessor.java:174)
at org.eclipse.persistence.tools.weaving.jpa.StaticWeave.start(StaticWeave.java:117)
at org.eclipse.persistence.tools.weaving.jpa.StaticWeave.main(StaticWeave.java:86)
Caused by: java.lang.ClassNotFoundException: FooIn
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:587)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
… 14 more

Task :compileKotlin FAILED

Execution failed for task ‘:compileKotlin’.

Process ‘command ‘C:\Program Files\Java\jdk-17.0.2\bin\java.exe’’ finished with non-zero exit value 1

  • Try:

Run with --stacktrace option to get the stack trace.
Run with --info or --debug option to get more log output.
Run with --scan to get full insights.

Здравствуйте, у нас в проекте тоже такая беда была.
Мы сделали так
Все файлы и java и kotlin положили в одну папку src.main.kotlin. в build.gradle добавили

sourceSets.main {
    java.srcDirs("src/main/kotlin")
}

После этого перед каждым запуском спринг конфигурации мы прогоняем gradle clean ass build. Так ошибка не падает. Правда бывают редко случаи когда в рантайме класс не находится. Но на test сервере такого не замечалось.

Возможно что-то еще в build.gradle надо добавить. Зависит от того что у вас там… у нас вот так

plugins {
    id 'io.jmix' version '1.3.0'
    id 'org.jetbrains.kotlin.jvm' version '1.6.20'
    id 'java'
}

apply plugin: 'org.springframework.boot'

jmix {
    bomVersion = '1.3.3'
    projectId = 'test'
}

sourceSets.main {
    java.srcDirs("src/main/kotlin")
}

java.sourceCompatibility = JavaVersion.VERSION_17
java.targetCompatibility = JavaVersion.VERSION_17
compileKotlin { kotlinOptions.jvmTarget = "17" }
compileTestKotlin { kotlinOptions.jvmTarget = "17" }

Как я понимаю таску на гите по этому поводу уже сделали. Мб в платформе чего поправят

1 симпатия