2017-05-15 6 views
9

thisはAndroidに関してよく似た質問ですが、ビルドツールとしてMavenのプレーンJavaを使用しています。新しい質問を投稿する方が良いと思います。JavaでKotlinクラスを使用しています:シンボルが見つかりません

Javaクラスから参照しようとしているKotlinクラスをMyKotlinClass.classとして作成しました。 Mavenビルドは失敗しますが、IntelliJ Ideaのコンパイルは正常に動作します。私はすでにMavenのためにKotlinプラグインを追加しました:

 <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) 
+1

私は 'MyClassLinkingKotlin.java'特に100行目(私はその[行、列]と思います)を表示してください – ThrowingSpoon

+0

質問に追加されました。 –

+0

[JavaからKotlinクラスをインスタンス化しようとするとエラーが発生する可能性があります](http://stackoverflow.com/questions/43834360/error-trying-to-instantiate-a-kotlin-class-from-java) – Ilya

答えて

19

あなたのMavenの設定はKotlinコンパイラプラグインが追加されますが、JavaコンパイラはKotlinコンパイラの後に実行されるようにするJavaコンパイラプラグインの実行を調整しない:それはこのように使用している場合でも、失敗します。したがって、JavaコンパイラはKotlinより前に実行され、Kotlinコンパイルされたクラスは表示されません。

はこちら(the documentationから取られた)混合言語プロジェクトのための正しい構成を示す抜粋です:

<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> 
+0

とても助かりました:) – MaxG

0

私はこの同じエラーに遭遇したが、正しいPOMのセットアップを持っていました。私の問題は、Intellijを使ってJavaクラスをKotlinクラスに変換しただけで、Kotlinファイルはsrc/main/javaに残っていたということでした。

私の解決策は、src/main/kotlinを作成し、そこでKotlinクラスを移動し、Javaファイルをsrc/main/javaのままにしておくことでした。しかし、あなたは確かに@ yoleの答えが示すmaven設定が必要です。

関連する問題