web-dev-qa-db-ja.com

ScalaプロジェクトはEclipseでコンパイルされません。「メインクラスが見つかりませんでした。」

私はEclipse 3.5.2と今日のScala/update-currentからのプラグインをインストールしました(Scala 2.8 finalです。)コンパイルして実行できますScala main()を実装する単一のシングルトンオブジェクトで構成されるプロジェクト。

しかし、プロジェクトにさらにクラスが含まれている場合、「メインクラスが見つかりませんでした」というエラーが表示されます。

私は解決策を探してみましたが、発見しました:

EclipseはMainクラスではなくMain $クラスを正しく探しています
* Debug Configurationsの下で、私のメインクラスは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
   }
}

しかし、HelloFrameの定義をHello内にネストすると、機能します。このスニペットは完全に実行されます。

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
    }
}
24
Thomas Heywood

私にとっての問題は、コンパイルを妨げるビルドエラー([問題]タブを参照)があったことです。おっとっと!このエラーが表示される理由は、コンパイルマクロが失敗しても実行マクロが続行し、そこにあると予想されるクラスファイルを実行しようとするためです。コンパイルを妨げるビルドエラーが発生したため、これらは存在しません。そのため、Main(コンパイルされていない)が見つからないと表示されています。

ビルドが正常に完了する、つまりエラーが修正されると、問題はなくなります。

理論的には、「問題」に記載されていない、ビルドが正常に完了しないより複雑な理由があると思います。

21
ninjagecko

1つの可能性は、ctrl-F11を使用して起動しようとしているが、別のクラスから起動していることです。

Scala EclipseプラグインはJava起動のデフォルトに従いません。環境設定->実行/デバッグ->起動には、いくつかのオプション起動操作->があります。常に以前に選択したアプリケーションなどを起動します。これは現在、Scala Eclipseプラグインでは機能しません。指定したメインを起動するには、クラスのエディターから起動する必要があります。

このためにバグが発生しました。 http://scala-ide.assembla.com/spaces/scala-ide/tickets/1000023-scala-launch--does-not-follow-jdt-behaviour

編集:これは(ほとんど)修正されました。

5
Matthew Farwell

私にとっては、Eclipse固有の問題でした。きがついた .classファイルがまったく作成されませんでした。したがって、binディレクトリにはコンパイルされたクラスがありません。 * .sbtを使用して* .scalaファイルを手動でコンパイルし、binディレクトリにコピーすると、期待どおりに機能していました。私はさまざまなヒントやトリックを試しましたが、私はreinstalled Scala plugin in Eclipseになるまで機能しませんでした。

4
user1459144

次の自動ビルドで「Project-> Clean ..」を実行して同様の問題を解決します。

2
Leon Rom

私はJava自分で作成したアプリケーションで同じエラーメッセージを受け取りました。

問題は、(Eclipse内ではありますが)Javaビルドパスに属しているjarを、Javaビルドパス(プロジェクトの[プロパティ]ウィンドウ)から削除せずに]削除したことです。 。私がそれをしたとき、クラスは再びコンパイルして実行することができました。

1
bluish

Intellijを使用している場合は、ディレクトリをソースルートとしてマークします

0
azzurolilc

Scala-ide.logを確認してください

私にとっての問題は、エラーが発生したことでした:

AppData\Local\Temp\sbt_10d322fb\xsbt\ClassName.scala:16:error:not found:value EnteringPhase EnteringPhase(currentRun.flattenPhase.next){s fullName separator}

0
Daniel Sobrado

適切なビルドツールのセットアップはありますか? sbtのようにインストールしましたか?

$ sbt --versionでバージョンを確認できます

セットアップされていない場合は、ここからダウンロードできます http://www.scala-sbt.org/download.html

インストール後にEclipseを再起動する必要がある場合があります。

0
bugs

.classファイルが存在し、通常はbinディレクトリの下にあります。

特に、同じプロジェクトの無関係なファイルにエラーがある場合、コンパイルは失敗し、.classファイルが作成されます。

0
starblue

私はこの問題に直面しました。 scala class、同じコードを記述し、Buildを "Build Automatically"に設定します。最後に、完全に正常に動作します。

0
Ashiq Imran

XXX.scalaファイルのコードをコピーするだけです。パッケージを削除して新しいScala Classを作成します。XXX.scalaコードを貼り付けます(Mavenを使用している場合は、Mavenをクリーンアップしてビルドします)。構成を再度実行します。これは私にとってはうまくいきます。

0
Ashiq Imran

エラーを含むプロジェクトがアプリケーションのビルドパスに追加され、コンパイルが正常に完了しない場合があります。アプリケーションを実行する前に、そのようなプロジェクトをビルドパスから削除してください。

これらのプロジェクトを削除すると、問題が解決しました。

0
Maqsood Ahmad