What clear case did was correct for C/C++ and possibly Pascal and Ada and run by makefiles. Clearcase would spot which header files were used in your code and only recompiled if you changed those headers and if someone else used the same code and headers clear case would give them the .o file it had compiled for you. (no having to generate .dep files). As local machines got faster this became less of a speedup.
In the latter all dependency tracking was not part of the language so it could be left to clear case.
Java does its own dependency tracking and so did cleanse on the server so you get the mess. Clearcase is not necessarily at fault here it just was not designed for Java.