I have some code which creates a JarFile and a URLClassLoader, both of which I want to close at the end. Naturally, I decided to use the finally block to deal with the cleanup:
JarFile jar = ...;
URLClassLoader loader = ...;
try {
    // work ...
} finally {
    jar.close();
    loader.close();
}
However, both close() invocations can throw an exception, so if jar.close() would throw an exception, then loader.close() would not be reached. One way I thought about working around this is by surrounding jar.close() with a try-catch block:
JarFile jar = ...;
URLClassLoader loader = ...;
try {
    // work ...
} finally {
    try {
        jar.close();
    } catch(IOException e) {
    } 
    loader.close();
}
But this seems ugly and excessive. Is there an elegant way of dealing with cleanup-related exceptions in finally blocks?