通常在运行时需要编译时依赖项。在maven中,
compile将在运行时将范围内的依赖项添加到类路径中(例如,在战争中,它们将被复制到WEB-INF /
lib中)。
但是,并非严格要求;例如,我们可以针对某个API进行编译,使其具有编译时依赖性,但随后在运行时包括一个也包含API的实现。
在某些情况下,项目需要一定的依赖性进行编译,但实际上并不需要相应的代码,但是这种情况很少见。
另一方面,包含编译时不需要的运行时依赖关系是很常见的。例如,如果您正在编写Java EE 6应用程序,则可以根据Java EE 6
API进行编译,但是在运行时,可以使用任何Java EE容器。这个容器提供了实现。
通过使用反射可以避免编译时依赖性。例如,可以使用来加载JDBC驱动程序,
Class.forName并且可以通过配置文件来配置实际的类。



