【发布时间】:2015-05-25 21:03:00
【问题描述】:
是否可以在不同的源集中使用 Kotlin 包函数和包属性?当我尝试这样做时,我抛出了NoSuchMethodError。
示例
我有一个带有 Kotlin 代码的 Gradle 项目和两个源集,main 和 test。
在main 中,我在其中一个文件中有以下代码:
package ru.ifmo.ctddev.igushkin.dkvs
...
public val payloadSplitter: String = " ### "
在test 中,我尝试使用以下代码访问payloadSplitter:
package ru.ifmo.ctddev.igushkin.dkvs
...
public class MessageTests {
...
test fun testParsing() {
...
checkParseAndToString("p1b 345 ${payloadSplitter} set a b c")
}
...
}
并且恰好在访问payloadSplitter 的第一行,在运行时我得到
java.lang.NoSuchMethodError: ru.ifmo.ctddev.igushkin.dkvs.DkvsPackage.getPayloadSplitter()Ljava/lang/String;
test 中也无法访问其他全局变量和函数,并出现同样的错误。
UPD Kotlin 团队解释了这个问题并宣布了修复here。
【问题讨论】:
-
在测试中是否有 ru.ifmo.ctddev.igushkin.dkvs 包中的任何顶级函数/属性?
-
如何运行测试?你能发布你的gradle配置吗?看起来测试包是针对主包编译的,但在没有它的情况下运行。
-
@SalomonBRYS, github.com/h0tk3y/dkvs/blob/master/build.gradle -- 在这里。
-
@NataliaUkhorskaya,是的。我有一个顶级财产。稍后我会尝试将其删除。
-
@hotkey 你如何运行测试?通过编辑器还是通过命令行?如果是后者,哪个命令?
标签: gradle nosuchmethoderror kotlin source-sets