Launch Jetty from Eclipse - solving "Unable to find a javac compiler"
I've not used Jetty for a little while, and in the interim I've upgraded my computer and switched to Linux. Needless to say, when I came to running Jetty to do some web service work this morning, it broke. Specifically, the symptom was that when I launched Jetty from Eclipse, using the Jetty launcher plugin, Axis would fail with a nasty error message:
HTTP ERROR: 500
Unable to compile class for JSP
The problem is that the front page for Axis has changed since I last used it: it's now internationalized, which is a good thing, but it uses JSP's to do the internationalizing. JSP's are compiled dynamically, hence the need for a compiler. The HTTP error is accompanied by a stacktrace:
2005-05-27 21:35:54,421 ERROR [SocketListener0-1] compiler.Compiler (Compiler.java:412) - Javac exception Unable to find a javac compiler; com.sun.tools.javac.Main is not on the classpath. Perhaps JAVA_HOME does not point to the JDK at org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory.getCompiler(CompilerAdapterFactory.java:105) at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:929) at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:758) at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:407) .....
Do not listen to the tricksy error message. He is lying! Don't waste hours messing with your
JAVA_HOME setting, wondering if the problem is related to using Java SDK 1.50 or 1.4.2, and switching back and forth between like a thing posessed. No, the simple answer is to add tools.jar (found in the lib directory of your Java SDK) to the classpath given to the Jetty instance. There's a tab to set the Jetty instance's classpath as part of the Jetty Launcher. Easy when you know how.
Update Dec 2006: Thanks for the nice comments and useful suggestions folks. I've now closed this entry to further comments.