Scala project won't compile in Eclipse; "Could not find the main class."

39,051

Solution 1

For me, the problem was that there was a build error (see Problems tab) which was preventing compilation; oops! The reason you see the error is that the run macro proceeds despite the failed compilation step, and attempts to run class files it expects to be there; they don't exist because there was a build error preventing compilation, so it says it can't find Main (not compiled).

Problem goes away when build can complete successfully, i.e. errors are fixed.

I guess, theoretically, there may be more complicated reasons your build is not completing successfully that are not listed in Problems.

Solution 2

One possibility is that you are trying to launch using ctrl-F11, but from a different class.

The Scala Eclipse plugin does not obey the defaults for Java launching. In Preferences->Run/Debug->Launching, there are some options Launch Operation->Always Launch the previously selected application, etc. This currently does not work in the Scala eclipse plugin. To launch a specified main, you need to launch it from the editor for the class.

There has been a bug raised for this. http://scala-ide.assembla.com/spaces/scala-ide/tickets/1000023-scala-launch--does-not-follow-jdt-behaviour

EDIT: This is now (mostly) fixed.

Solution 3

For me it was Eclipse specific problem. I noticed that .class file wasn't built at all. So bin directory doesn't have compiled classes. When I manually compiled *.scala file using *.sbt and copied it to bin directory it was working as expected. I tried different tips and tricks and it wasn't worked until I reinstalled Scala plugin in Eclipse .

Solution 4

I'd solve similar problem by executig "Project->Clean.." with next automatically building.

Solution 5

I had the same error message with a Java application made by myself.

The problem was that I deleted (though inside Eclipse) a jar that belonged to the Java build path, without deleting it from the Java build path (project's Properties window). When I did it the class could compile and run again.

Share:
39,051
Thomas Heywood
Author by

Thomas Heywood

Updated on July 09, 2022

Comments

  • Thomas Heywood
    Thomas Heywood almost 2 years

    I have installed Eclipse 3.5.2 and today's Scala plugin from /update-current (that's Scala 2.8 final.) I can compile and run Scala projects consisting of a single singleton object that implements main().

    But, if a project contains more classes, I receive the "Could not find the main class" error.

    I have tried searching for the solution and I discovered:

    Eclipse is correctly looking for the Main$ class, not the Main class
    * under Debug Configurations, my main class is correctly identified as mypackage.Main
    * my plugin is up to date and recommended for my version of Eclipse
    * cleaning, restarting etc. doesn't help.

    The same project will compile with scalac.

    Thanks for any ideas on how to solve this.

    EDIT: MatthieuF suggested I should post the code.

    This snippet produces an error. It's not the most idiomatic code, but I wrote it that way to test my environment. I tried it as a single file and as separate files. It DOES work with 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
       }
    }
    

    BUT, if I nest the definition of HelloFrame within Hello, it works. This snippet runs perfectly:

    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
        }
    }