Writing Java Applications that Work with Different Incompatible Versions of a Java API/Library