在Java中使用Kotlin类:找不到符号

我已经找到了关于Android的这个类似的问题,但我使用普通的Java和Maven作为构建工具。 我认为最好发表一个新的问题。

我创建了一个Kotlin类,我试图从Java类MyKotlinClass.class 。 Maven构建失败,而IntelliJ Idea中的编译工作正常。 我已经将Kotlin插件添加到maven:

  <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId> <version>${kotlin.version}</version> <executions> <execution> <id>compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> <execution> <id>test-compile</id> <phase>test-compile</phase> <goals> <goal>test-compile</goal> </goals> </execution> </executions> </plugin> 

但是这并没有帮助:

 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project app: Compilation failure [ERROR] MyClassLinkingKotlin.java:[100,40] error: cannot find symbol 

行/列恰好引用符号MyKotlinClass.class 。 即使是这样使用也会失败:

 System.err.println(MyKotlinClass.class) 

您的Maven配置会添加Kotlin编译器插件,但不会调整Java编译器插件的执行,以便Java编译器在Kotlin编译器之后运行。 因此,Java编译器在Kotlin之前运行,并没有看到Kotlin编译的类。

这是一个显示混合语言项目的正确配置的摘录(摘自文档 ):

 <build> <plugins> <plugin> <artifactId>kotlin-maven-plugin</artifactId> <groupId>org.jetbrains.kotlin</groupId> <version>${kotlin.version}</version> <executions> <execution> <id>compile</id> <goals> <goal>compile</goal> </goals> <configuration> <sourceDirs> <sourceDir>${project.basedir}/src/main/kotlin</sourceDir> <sourceDir>${project.basedir}/src/main/java</sourceDir> </sourceDirs> </configuration> </execution> <execution> <id>test-compile</id> <goals> <goal>test-compile</goal> </goals> <configuration> <sourceDirs> <sourceDir>${project.basedir}/src/test/kotlin</sourceDir> <sourceDir>${project.basedir}/src/test/java</sourceDir> </sourceDirs> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <executions> <!-- Replacing default-compile as it is treated specially by maven --> <execution> <id>default-compile</id> <phase>none</phase> </execution> <!-- Replacing default-testCompile as it is treated specially by maven --> <execution> <id>default-testCompile</id> <phase>none</phase> </execution> <execution> <id>java-compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> <execution> <id>java-test-compile</id> <phase>test-compile</phase> <goals> <goal>testCompile</goal> </goals> </execution> </executions> </plugin> </plugins> </build> 

我遇到了这个相同的错误,但有正确的POM设置。 我的问题是,我只是用一个Intellij把一个Java类转换成一个Kotlin类,而把这个Kotlin文件留在src/main/java

对我来说,解决方案是创建一个src/main/kotlin并将我的Kotlin类移到那里,并将我的Java文件留在src/main/java 。 但是你确实需要@ yole的答案显示的maven设置。