this Androidに関する同様の質問を見つけましたが、ビルドツールとしてMavenでJavaを使用しています。新しい質問を投稿する方が良いと思います。
Java class as MyKotlinClass.class
として参照しようとしているKotlinクラスを作成しました。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クラスに変換したところ、src/main/Java
。
私にとっての解決策は、src/main/kotlin
とKotlinクラスをそこに移動して、Javaファイルをsrc/main/Java
。しかし、@ yoleの答えが示すMavenのセットアップが必ず必要です。