Scala project won't compile in Eclipse; "Could not find the main class."
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.
Thomas Heywood
Updated on July 09, 2022Comments
-
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 } }