pio*_*rek 5 java gradle kotlin junit5
java 8, gradle 5, kotlin 1.2.71, junit 5.3.2, intellij 2018.03 12 月 17 日,将 kotlin 和 java 文件保存在同一 src 目录中\n文件结构为:
\n\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 build.gradle\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 gradle\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 wrapper...\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 gradlew\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 gradlew.bat\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kotlin\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80 ...\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 resources\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 application.yml\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 kotlin\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 xxx\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 shop\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 order\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Junit5Kotlin.kt\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Junit5Test.java\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 OrderITest.kt\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ProductITest.kt\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Util.java\nRun Code Online (Sandbox Code Playgroud)\n\n来自intellij(“运行所有测试”点击“测试”目录)一切正常。从./gradlew test测试 kotlin 类看不到 java 测试 util 类:
xxx.shop.order.Manual > should return client error on bad input FAILED\n java.lang.NoClassDefFoundError: xxx/shop/order/Util\n at xxx.shop.order.Manual.before(ProductITest.kt:229)\n\n Caused by:\n java.lang.ClassNotFoundException: xxx.shop.order.Util\n at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)\n at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)\n at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)\n ... 1 more\nRun Code Online (Sandbox Code Playgroud)\n\n这不是编译时错误,而是运行时错误,因为其他测试已成功完成
\n\n我的 build.gradle 的潜在重要部分:
\n\napply plugin: \'kotlin\'\napply plugin: \'kotlin-spring\'\napply plugin: \'kotlin-jpa\'\napply plugin: \'eclipse\'\napply plugin: \'org.springframework.boot\'\napply plugin: \'io.spring.dependency-management\'\n\ngroup = \'xxx.shop\'\nversion = \'0.0.1-SNAPSHOT\'\nsourceCompatibility = 1.8\ncompileKotlin {\n kotlinOptions {\n freeCompilerArgs = ["-Xjsr305=strict"]\n jvmTarget = "1.8"\n }\n}\ncompileTestKotlin {\n kotlinOptions {\n freeCompilerArgs = ["-Xjsr305=strict"]\n jvmTarget = "1.8"\n }\n}\n\ntest {\n useJUnitPlatform()\n}\nRun Code Online (Sandbox Code Playgroud)\n
你必须将你的java文件放在javadir中,否则它们将不会被编译。
\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main\n \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 kotlin\n \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80 ...\n \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 java\n \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80 ...\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 resources\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 application.yml\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 kotlin\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 xxx\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 shop\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 order\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Junit5Kotlin.kt\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 OrderITest.kt\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ProductITest.kt\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Util.java\n java\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 xxx\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 shop\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 order\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Junit5Test.java\nRun Code Online (Sandbox Code Playgroud)\n\n并在gradle中添加java插件
\n\napply plugin: 'java'\nRun Code Online (Sandbox Code Playgroud)\n\n编辑: \n好的,如果您希望将其全部放在 kotlin 目录中,请尝试将其添加到您的 build.gradle 中:
\n\napply plugin: 'java'\nsourceSets.main.java.srcDirs = ['src/main/kotlin']\nsourceSets.test.java.srcDirs = ['src/test/kotlin']\nRun Code Online (Sandbox Code Playgroud)\n\n这样它会在 kotlin 编译器之前运行 java 编译器,所以你会得到这个.class文件。
| 归档时间: |
|
| 查看次数: |
1798 次 |
| 最近记录: |