title: Can a program depend on a library during compilation but not runtime?
body: <p>I understand the difference between runtime and compile-time and how to differentiate between the two, but I just don't see the need to make a distinction between compile-time and runtime <strong>dependencies</strong>.</p>
  
  <p>What I'm choking on is this: how can a program <em>not depend</em> on something at runtime that it depended on during compilation? If my Java app uses log4j, then it needs the log4j.jar file in order to compile (my code integrating with and invoking member methods from inside log4j) as well as runtime (my code has absolutely no control over what happens once code inside log4j.jar is ran).</p>
  
  <p>I'm reading up on dependency resolution tools such as Ivy and Maven, and these tools clearly make the distinction between these two types of dependencies. I just don't understand the need for it.</p>
  
  <p>Can anyone give a simple, "King's English"-type explanation, preferably with an actual example that even a poor sap like me could understand?</p>