ScalaプロジェクトはEclipseでコンパイルされません。 "メインクラスを見つけることができませんでした。"
-
08-10-2019 - |
質問
Eclipse 3.5.2をインストールし、今日のScalaプラグインを /Update-Current(Scala 2.8 Finalです)からインストールしました。
ただし、プロジェクトにより多くのクラスが含まれている場合、「メインクラスが見つかりませんでした」エラーを受け取ります。
解決策を検索しようとしましたが、発見しました。
Eclipseはメインクラスではなく、メイン$クラスを正しく探しています
*デバッグ構成の下で、私のメインクラスはmypackage.mainとして正しく識別されます
*私のプラグインは最新であり、Eclipseのバージョンに推奨されています
*クリーニング、再起動などは役に立ちません。
同じプロジェクトがScalacでコンパイルされます。
これを解決する方法についてのアイデアをありがとう。
編集:Matthieufは、コードを投稿することを提案しました。
このスニペットはエラーを生成します。それは最も慣用的なコードではありませんが、私は自分の環境をテストするためにそれを書きました。単一のファイルとして、また別のファイルとして試しました。 Scalacで動作します。
import swing._
class HelloFrame extends Frame {
title = "First program"
contents = new Label("Hello, world!")
}
object Hello {
val frame = new HelloFrame
def main(args : Array[String]) : Unit = {
frame.visible = true
}
}
しかし、Hello内でHelloframeの定義をネストすると、機能します。このスニペットは完全に実行されます:
import swing._
object Hello {
class HelloFrame extends Frame {
title = "First program"
contents = new Label("Hello, world!")
}
val frame = new HelloFrame
def main(args : Array[String]) : Unit = {
frame.visible = true
}
}
解決
私にとって、問題は、編集を妨げていたビルドエラー(問題のタブを参照)があったことでした。おっと!エラーが表示される理由は、コンパイルのステップが失敗したにもかかわらず実行マクロが進行し、そこにあると予想されるクラスファイルを実行しようとするためです。コンピレーションを防ぐビルドエラーがあったため、それらは存在しません。そのため、メインが見つからない(コンパイルされていない)と表示されます。
ビルドが正常に完了すると問題が消え、すなわちエラーが修正されます。
理論的には、問題にリストされていないビルドが正常に完了していないより複雑な理由があるかもしれません。
他のヒント
1つの可能性は、CTRL-F11を使用して起動しようとしているが、別のクラスから起動しようとしていることです。
Scala Eclipseプラグインは、Javaの発売のデフォルトに従いません。設定 - > run/debug->起動には、オプションの起動操作がいくつかあります - >常に選択したアプリケーションを常に起動するなど。これは現在、Scala Eclipseプラグインでは機能しません。指定されたメインを起動するには、クラスのエディターから起動する必要があります。
これにはバグが提起されました。 http://scala-ide.assembla.com/spaces/scala-ide/tickets/1000023-scala-launch--does-not-follow-jdt-behaviour
編集:これは(ほとんど)固定されています。
私にとっては、それは日食の特定の問題でした。きがついた .class
ファイルはまったく構築されていませんでした。それで bin
ディレクトリにはクラスがコンパイルされていません。 *.sbtを使用して *.scalaファイルを手動でコンパイルしたときにコピーしたとき bin
ディレクトリそれは期待どおりに機能していました。私はさまざまなヒントとトリックを試しましたが、それは私まで機能しませんでした EclipseでScalaプラグインを再インストールしました .
次に自動的に構築すると、executig "project-> clean .."によって同様の問題を解決します。
自分で作成したJavaアプリケーションで同じエラーメッセージがありました。
問題は、私が(Eclipseの中に)削除したことでした。 Javaビルドパス, 、Javaビルドパス(プロジェクトのプロパティウィンドウ)から削除することなく。私がそれをしたとき、クラスはコンパイルして再び実行できます。
を確認してください .class
ファイルは、通常は下に存在します bin
ディレクトリ。
特に、同じプロジェクトに無関係なファイルにエラーがある場合、コンピレーションが失敗する可能性があり、 .class
ファイルが生成されます。
エラーを含むプロジェクトの場合、アプリケーションのビルドパスに追加され、コンピレーションの成功が完了します。アプリケーションを実行する前に、そのようなプロジェクトをビルドパスから削除することを確認してください。
これらのプロジェクトを削除すると、私にとって問題が解決しました。
適切なビルドツールのセットアップはありますか? SBTのようにインストールしましたか?
$ sbt -versionでバージョンを確認できます
セットアップがない場合は、ここからダウンロードできます http://www.scala-sbt.org/download.html
インストール後に日食を再起動する必要があるかもしれません。
xxx.scalaファイルコードをコピーするだけです。パッケージを削除して、新しいSCALAクラスを作成します。 xxx.scalaコードを貼り付けます。 (Mavenを使用している場合は、Maven CleanとBuildを実行します。)構成をもう一度実行します。これは私のために働きます。
私はこの問題に直面しました。パッケージ名を削除し、Scalaクラスを作成し、同じコードを作成し、ビルドを「自動的にビルド」するように設定しました。最後に、それは完全に正常に機能します。
scala-ide.logを確認してください
私にとって問題は、エラーがあったことでした。
AppData local temp sbt_10d322fb xsbt classname.scala:16:error:not not in cound:enteringphase enterphase(currentrun.flattenphase.next){s fullname separator}
Intellijを使用している場合は、ソースルートとしてマークディレクトリを使用しています