[英]Calling Kotlin from Java — error: package demo does not exist
我不明白文檔:
包級函數
在包 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();
}
}
科特林來源:
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$
在你的 build.gradle(模塊)中使用它:
apply plugin: 'kotlin-android'
gradle.build
文件的類路徑中: dependencies {
classpath "com.android.tools.build:gradle:4.1.2"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.21"
classpath "org.jetbrains.kotlin:kotlin-android-extensions:1.4.21"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
在您的模塊(應用程序) gradle.build
上應用 kotlin-android 插件,如下所示:
plugins { id 'com.android.application' id 'kotlin-android' }
demo 文件夾應該在 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 文件的導入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.