I thought it was common knowledge, but after speaking with a bunch of people last week, I guess it isn't. So here it goes... the Java compiler that comes with Eclipse is not the standard javac compiler you get with the Java SDK. Nope, it's a completely separate compiler.
It does wonderful things. My personal favourite thing about the Eclipse Java compiler is the fact that it will compile code that contains errors. That is, when you compile code that has errors in it, the compiler will flag those errors for you and then generate the .class file anyway. You can actually run and debug the code and, should the runtime actually run into your errors, it will then throw an exception.
This is pretty handy when you're doing top-down development. Step one is write the top-level code. Step two is implement some piece of the top-level code. Step three is run and test it. As long as your tests don't run into the unimplemented code, you're golden. Even then, it's not the end of the world. Think about this in terms of unit tests. You don't actually have to make all your tests run right away, just the ones you actually want to test at any point in time. Any JUnit test cases you have that have errors in them (because the code hasn't been implemented yet) will be reported as errors, but everything else will run as normal.
How cool is that?
It gets better. Lots of folks think that the JDT compiler is pretty awesome. Did you know that when you use JSPs on Apache Tomcat 5.5 Eclipse Java compiler is used to compile them? Or that IntelliJ IDEA 6.0 will support Eclipse Java compiler? GCJ, the GNU compiler for Java is switching to use the Eclipse Java Compiler. There are many others.
The Eclipse Java compiler does not depend on the Eclipse platform. It has a front-end API which can be piloted either from the Eclipse IDE, from an Ant task, or from a simple command-line tool (batch compiler). I'm talking with a few folks about writing up an Eclipse Corner Article or two on compiler topics. Should be good stuff.