JDK7 Re-think
In my more recent experimentations I'm finding that my first-pass, hasty testing of JDK7 on old projects is not as much of a failure as I'd thought it was. The problem lies not with my project, the IDE, the new JDK, or the old libraries, but with the code-coverage tool I use to make sure I'm not missing tests on my code.
I use Emma to mark test coverage when I run my unit tests. It does a quick mark-up in the class files as the tests are run, and it verifies the marked points are hit after the tests are finished. I'm not entirely sure of how the magic works, but I understand the bulk of the theory, and I've been happy with the experiences until now.
It seems that the magic mark-up is messing with the JDK7 compiled classes. If I run the tests without the code-coverage turned on, they pass as expected. I tested this running the tests in Eclipse and Ant, using Spring 3.0.5 and 3.0.6. I thought there might have been something in the newer Spring that fixed it, but, alas, it behaved the same.
Embarrassingly enough, the way I stumbled on the "coverage is to blame" is by hitting the debug button next to the coverage button on my Eclipse toolbar. The tests run in debug passed while with the coverage failed. A couple file switches later, and I'm pretty confident that it is the coverage tool that is to blame.
I've done some quick checking, and the few code-coverage tools I'm familiar with all seem to have the same problem, based on the queries being made on the various places that Google knows about. I suspect there will be a bit of time before there's enough re-understanding of the class mark-up magic necessary to run with JDK7. Until then, it seems either use JDK6 or don't use code-coverage.
I'm interested in experimenting (and probably upgrading my projects) to use JDK7, and the new Tomcat 7 as well, so I'll be passing on code-coverage for a while.