由于我无法解决kotlin
的问题,因此我决定返回groovy
以实现插件。
然而我遇到了这个问题。我有这样的项目结构。
为了不重写所有类,我决定重用kotlin
中实现的类。
但我的课程FileProcessingCoreGroovy
& DownloadCoreGroovy
无法解析班级ProcessStream
和UnpackStream
。
我认为他们应该能够自由地互相使用,但我想我错了。问题是什么?
类本身可以通过IDE导入(没有标记为红色等等)
控制台输出如下所示(我使用另一个类从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
^
答案 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伴侣对象有关。我将静态函数从伴随对象移动到包级别,它开始工作。