2017-08-18 15 views
0

私は、2つのサブフォルダ "api"と "implementation"を含む "projectA"を含むgradle 4.1マルチプロジェクトを持っています。gradleはkotlinクラスを使用してJavaクラスをコンパイルできません

マルチプロジェクトでは、メインbuild.gradleのサブプロジェクトセクションで定義されたkotlinjava-libraryプラグインが使用されます。 実装プロジェクトは、私はからkotlinクラスの新しいインスタンスを作成しています "のsrc /メイン/ Javaの内側と実装プロジェクトでは、私がkotlinているAPIフォルダで:projectA:api

にAPIの依存関係およびJavaファイルをAVEC API。

Intellij Ideaの中には、コンパイルエラーはありません。しかし、私はgradleを使ってプロジェクト全体をコンパイルするとerror: cannot find symbolがあります。これは、compileJavaがフォルダkotlin-classesにアクセスしていないかのようです。 build/kotlin-classesインサイド

、私は私のfile.class を参照してくださいクラスファイルもビルド/クラスディレクトリにエラーの

詳細です:

Task :projectA:api:compileKotlin Using kotlin incremental compilation

Task :projectA:implementation:compileJava (...) error: cannot find symbol (the import fails)

アップデート1:取り外しのjava -libraryは私の問題を解決しました

答えて

1

これはjava-libraryプラグインのknown issueです:別のJVM言語(Kotlin、Scala、Groovyなど)を持つプロジェクトで使用されると、他の言語のクラスを登録しないので、従属プロジェクトはそれらをクラスを消費するときに取得します。

幸い、回避策もあります。 Kotlinするようになって、それは次のようになります。

configurations { 
    apiElements { 
     outgoing.variants.getByName('classes').artifact(
      file: compileKotlin.destinationDir, 
      type: ArtifactTypeDefinition.JVM_CLASS_DIRECTORY, 
      builtBy: compileKotlin) 
    } 
} 

をごKapt1を使用している場合、それはfile: compileKotlinAfterJava.destinationDirだ、と4.0代わりに使用builtBy: copyMainKotlinClassesよりGradleのバージョンより低いため。

この問題は、Kotlinの問題追跡ツール:KT-18497でも追跡されています。この問題は、Kotlin Gradleのプラグイン側で修正されているかどうかを確認するために、上記の回避策は必要ありません。

関連する問題