Gradle: Kotlin тесты не могут видеть Java-файлы в тесте - PullRequest
0 голосов
/ 30 декабря 2018

java 8, gradle 5, kotlin 1.2.71, junit 5.3.2, intellij 2018.03 17 декабря, хранение файлов kotlin и java в одном каталоге src. Структура файла:

.
├── build.gradle
├── gradle
│   └── wrapper...
│       
├── gradlew
├── gradlew.bat
└── src
    ├── main
    │   ├── kotlin
    │   │   └─ ...
    │   └── resources
    │       └── application.yml
    └── test
        └── kotlin
            └────── xxx
                    └── shop
                        └── order
                            ├── Junit5Kotlin.kt
                            ├── Junit5Test.java
                            ├── OrderITest.kt
                            ├── ProductITest.kt
                            └── Util.java

от intellij(«Выполнить все тесты», кликнул на «Тест»).из ./gradlew test классы test kotlin не видят классы утилит java test:

xxx.shop.order.Manual > should return client error on bad input FAILED
    java.lang.NoClassDefFoundError: xxx/shop/order/Util
        at xxx.shop.order.Manual.before(ProductITest.kt:229)

        Caused by:
        java.lang.ClassNotFoundException: xxx.shop.order.Util
            at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
            at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
            at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
            ... 1 more

, и это не ошибка времени компиляции, а ошибка времени выполнения, поскольку другие тесты успешно завершились

потенциально важные частимой build.gradle:

apply plugin: 'kotlin'
apply plugin: 'kotlin-spring'
apply plugin: 'kotlin-jpa'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'xxx.shop'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
compileKotlin {
    kotlinOptions {
        freeCompilerArgs = ["-Xjsr305=strict"]
        jvmTarget = "1.8"
    }
}
compileTestKotlin {
    kotlinOptions {
        freeCompilerArgs = ["-Xjsr305=strict"]
        jvmTarget = "1.8"
    }
}

test {
    useJUnitPlatform()
}

1 Ответ

0 голосов
/ 30 декабря 2018

Вы должны поместить свои java файлы в java dir, иначе они не будут скомпилированы.

└── src
    ├── main
    │   ├── kotlin
    │   │   └─ ...
    │   ├── java
    │   │   └─ ...
    │   └── resources
    │       └── application.yml
   └── test
        └── kotlin
            └────── xxx
                    └── shop
                        └── order
                            ├── Junit5Kotlin.kt
                            ├── OrderITest.kt
                            ├── ProductITest.kt
                            └── Util.java
            java
            └────── xxx
                    └── shop
                        └── order
                            ├── Junit5Test.java

И добавить плагин java в gradle

apply plugin: 'java'

РЕДАКТИРОВАТЬ: ОК, если вы хотите, чтобы все это было в kotlin dir, попробуйте добавить это к вам build.gradle:

apply plugin: 'java'
sourceSets.main.java.srcDirs = ['src/main/kotlin']
sourceSets.test.java.srcDirs = ['src/test/kotlin']

Таким образом, он будет запускать компилятор Java перед kotlin один, так что вы будетеесть .class файлы.

...