2017-10-03 15 views
0

私はJava、Scala、Kotlinで書かれたプロジェクトを持っています。Kotlin、Scala、JavaでGradleビルドに失敗しました

しかし、私はGradleの中で、このプロジェクトをビルドするとき、それはメッセージとエラー:

11:19:51: Executing task 'build'... 

:compileKotlin 
Using Kotlin incremental compilation 
e: F:\Code\Project\Avalon\src\main\kotlin\avalon\group\Execute.kt: (3, 19):    
Unresolved reference: Flag 
e: F:\Code\Project\Avalon\src\main\kotlin\avalon\group\Execute.kt: (10, 18):  
Unresolved reference: GroupMessageResponder 
e: F:\Code\Project\Avalon\src\main\kotlin\avalon\group\Execute.kt: (13, 2): 
'doPost' overrides nothing 
e: F:\Code\Project\Avalon\src\main\kotlin\avalon\group\Execute.kt: (35, 23): 
Unresolved reference: Flag 
e: F:\Code\Project\Avalon\src\main\kotlin\avalon\group\Execute.kt: (38, 2): 
'getHelpMessage' overrides nothing 
e: F:\Code\Project\Avalon\src\main\kotlin\avalon\group\Execute.kt: (40, 2): 
'getKeyWordRegex' overrides nothing 
e: F:\Code\Project\Avalon\src\main\kotlin\avalon\group\Execute.kt: (42, 2): 
'instance' overrides nothing 
:compileKotlin FAILED 

FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':compileKotlin'. 
> Compilation error. See log for more details 

* Try: 
Run with --stacktrace option to get the stack trace. Run with --info or -- 
debug option to get more log output. 

BUILD FAILED in 1s 
1 actionable task: 1 executed 
Compilation error. See log for more details 
11:19:53: Task execution finished 'build'. 

これらのエラーは「未解決の参照」についてすべてであり、それらの「参照」が全てのScalaやJavaで書かれています。

しかし、IDEA でこのプロジェクトを実行すると、がうまく動作します。

これは、GradleがKotlinを最初にコンパイルすることによって発生したと考えました。最後にコンパイルする必要があります。そのため、「参照」が見つかりませんでした。

そして、これは私のbuild.gradleです:build.gradle

UPDATE:

gradle clean testClasses --infoの出力の一部:

...SKIP... 
> Task :compileKotlin 
Using Kotlin incremental compilation 

e: F:\Code\Project\Avalon\src\main\kotlin\avalon\group\Execute.kt: (3, 19): 
Unresolved reference: Flag 
e: F:\Code\Project\Avalon\src\main\kotlin\avalon\group\Execute.kt: (11, 18): 
Unresolved reference: GroupMessageResponder 
...SKIP.... 

> Task :compileKotlin 
[KOTLIN] deleting F:\Code\Project\Avalon\build\classes\kotlin\main on error 
[KOTLIN] deleting F:\Code\Project\Avalon\build\classes\kotlin\main on error 

:compileKotlin (Thread[Task worker Thread 3,5,main]) completed. Took 15.981 secs. 

FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':compileKotlin'. 
> Compilation error. See log for more details 

* Try: 
Run with --stacktrace option to get the stack trace. Run with --debug option 
to get more log output. 

BUILD FAILED in 24s 
2 actionable tasks: 2 executed 
Stopped 0 worker daemon(s). 

全出力がhereを掲載しました。

+0

複数のJava-JVM以外の言語を使用する場合は注意が必要です。 '未解決参照:Flag'のクラスは何ですか?スカラですか? './gradlew clean testClasses --info'を実行して出力をポストすることができます – guenhter

+0

@guenhterこのエラーは' 'scalle build'を実行するときに' 'Scala''を参照するときに起こります。そして、 'gradle clean testClasses --info'の出力が今投稿されました... –

+0

出力をもっと投稿してください。最高は上からであろう。私は問題が何であるか考えていますが、より多くのログが必要です。 – guenhter

答えて

1

問題は異なる言語です。

一部KotlinとJava

のは、あなただけのkotlinとJavaを持っていると仮定しましょう。あなたは

kotlin -> java 
java -> kotlin 

->は、AがBのクラスにアクセスする意味)からコンパイル(compileKotlin)中にKotlinは/ jointCompilation/このクロスコンパイルの世話をするためである、ということを行うことができます理由をアクセスすることができるよりも whatever-other-nameの2つの言語の間にあります。


Kotlinとスカラ座(一方向)

しかし、あなたがケースがある場合:

kotlin -> scala 

あなたは次のことを考慮する必要がありますよりも: をcompileKotlin実行すると、それはすべてのコンパイル時に.java.ktのファイルはclassになりますが、.scalaのファイルには含まれません(については何も知らないため)。)。 scalaクラスにkotlinからアクセスするときに、.scalaクラスを最初にコンパイルするよりも、compileKotlinコンパイルプロセスでこれらのファイルが正しくコンパイルされていることが確認されていることを確認してください。

scalaは、kotlinより前に実行する必要があると定義できます。

compileKotlin.dependsOn compileScala 

これまでのところは良いKotlinとスカラ座(両方向)

が、このシナリオが動作していないので、あなたが

kotlin -> scala 
scala -> kotlin 

を持っているときに問題があります。

scalaクラスをまずコンパイルして、kotlinクラスを正常にコンパイルする必要があります(上記の説明を参照)。一方、scalaクラスを正常にコンパイルするには、kotlinクラスをコンパイルする必要があります。 それは問題です。

解決策は、いずれかの言語ですべての言語でjointCompilationが許可されていることです(ただしこれは発生しません)。

したがって、両方がJavaでない2つのJVM言語では、どの方向のアクセスが許可されるかを決定する必要があります。しかし、アクセスの両方の方向を許可することはできません。このような場合、多くの場合、論理をjavaクラスに入れて、例えばjavaクラスの代わりにjavaクラスにアクセスすることが役立ちます。 scalaクラス。

この問題は、例えば、 groovyjavaと投稿のような他のjvm言語https://discuss.gradle.org/t/kotlin-groovy-and-java-compilation/14903/10

+0

多くのありがとうございます。しかし、他にも解決策はありますか?すべてのScalaコードを書き直さなければならないことを確かめるため、このプロジェクトはIDEA **で通常コンパイルして実行できます**。 –

+0

私は古い会社でも「groovy」と「scala」と同じ問題がありました。それはIDEで動作します(なぜなら、IntellJは、とにかく魔法のようなソフトウェアです)。しかし、gradleを使用すると、これが動作しない理由は絶対に決定論的で合理的です(JVMのすべての言語をクロスコンパイルできるスーパーコンパイラ) – guenhter

+0

私は書き直しを完了し、これは確かに、おかげで多くの助けになります。 –

関連する問題