groovy无法解决kotlin类

时间:2017-02-13 09:38:43

标签: groovy kotlin

由于我无法解决kotlin的问题,因此我决定返回groovy以实现插件。

然而我遇到了这个问题。我有这样的项目结构。

enter image description here

为了不重写所有类,我决定重用kotlin中实现的类。

但我的课程FileProcessingCoreGroovy& DownloadCoreGroovy无法解析班级ProcessStreamUnpackStream

我认为他们应该能够自由地互相使用,但我想我错了。问题是什么?

类本身可以通过IDE导入(没有标记为红色等等)

enter image description here

控制台输出如下所示(我使用另一个类从PluginUtils类导入kotlin

:clean                                                                           
:compileKotlin (...multiple deprecated messages...)
:compileJava UP-TO-DATE       
:compileGroovy                 
startup failed:                
D:\groovy_apps\MISC\gradle-app-environment-plugin\src\main\groovy\com.lapots.gradle.plugins.appenv\ApplicationEnvironmentGroovyPlugin.g
roovy: 4: unable to resolve class com.lapots.gradle.plugins.appenv.core.PluginUtils
 @ line 4, column 1.
   import com.lapots.gradle.plugins.appenv.core.PluginUtils
   ^                           

3 个答案:

答案 0 :(得分:8)

看起来并不那么简单。

请参阅https://discuss.gradle.org/t/kotlin-groovy-and-java-compilation/14903/2

使用那里的建议,我添加了

compileGroovy {
    dependsOn tasks.getByPath('compileKotlin')
    classpath += files(compileKotlin.destinationDir)
}

它有效。

答案 1 :(得分:1)

vuk's answer最终为我解决了这个问题。

但是,它不能立即起作用。我的一些Groovy Spock测试依赖于Kotlin中的测试实用程序,我花了很多时间来找出问题所在。原来,我没有将Kotlin文件从src/test/groovy文件夹中移出,因此没有在正确的时间进行编译。

请确保根据语言,每个文件都位于正确的子文件夹中。
例如:

src
+---- main
|   +---- kotlin
|       +---- ...
+---- test
    +---- groovy
    |   +---- ...
    +---- kotlin
        +---- ...

对于测试,此Gradle代码将在Groovy之前编译Kotlin:

compileTestGroovy {
    dependsOn tasks.getByPath('compileTestKotlin')
    classpath += files(compileTestKotlin.destinationDir)
}

答案 2 :(得分:0)

我遇到了同样的问题。它与Kotlin伴侣对象有关。我将静态函数从伴随对象移动到包级别,它开始工作。