从Java调用Kotlin – 错误:包演示不存在

我不明白的文件 :

包级函数

在org.foo.bar包中的example.kt文件中声明的所有函数和属性,包括扩展函数,都被编译成名为org.foo.bar.ExampleKt的Java类的静态方法。

// example.kt package demo class Foo fun bar() { } // Java new demo.Foo(); demo.ExampleKt.bar(); 

我的代码如下。

编译错误; 构建失败:

 thufir@dur:~/NetBeansProjects/kotlin$ thufir@dur:~/NetBeansProjects/kotlin$ gradle compileJava > Task :compileJava /home/thufir/NetBeansProjects/kotlin/src/main/java/net/bounceme/dur/kotlin/App.java:12: error: package demo does not exist new demo.Foo(); ^ /home/thufir/NetBeansProjects/kotlin/src/main/java/net/bounceme/dur/kotlin/App.java:13: error: package demo does not exist demo.ExampleKt.bar(); ^ 2 errors FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':compileJava'. > Compilation failed; see the compiler error output for details. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. * Get more help at https://help.gradle.org BUILD FAILED in 0s 1 actionable task: 1 executed thufir@dur:~/NetBeansProjects/kotlin$ 

java源码:

 package net.bounceme.dur.kotlin; import java.util.logging.Logger; public class App { private static final Logger LOG = Logger.getLogger(App.class.getName()); private void run() { LOG.info("running"); new demo.Foo(); demo.ExampleKt.bar(); } public static void main(String[] args) { new App().run(); } } 

kotlin来源:

 package demo; class Foo fun bar() { } 

项目:

 thufir@dur:~/NetBeansProjects/kotlin$ thufir@dur:~/NetBeansProjects/kotlin$ tree . ├── build │ ├── classes │ │ └── java │ │ └── main │ └── tmp │ └── compileJava ├── build.gradle ├── gradle │ └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle └── src ├── main │ ├── java │ │ └── net │ │ └── bounceme │ │ └── dur │ │ └── kotlin │ │ └── App.java │ └── kotlin │ └── example.kt └── test └── java └── AppTest.java 18 directories, 9 files thufir@dur:~/NetBeansProjects/kotlin$ 

演示文件夹应该在src / main / kotlin和example.kt下面。

所以应该是src / main / kotlin / demo / example.kt

不需要匹配目录和包:源文件可以任意放置在文件系统中。

[edit2]我做了一个例子:

Java代码

 package test; import demo.HelloWorldKt; public class Test { public static void main(String[] args) { ExampleKt.bar(); } } 

科特林代码:

 package demo fun bar() { println("yeah") } 

如果kotlin文件是直接在src / main / kotlin下的helloWrold.kt

你的java文件似乎缺少kotlin文件的导入。