程序在编译过程中可以依赖库,但运行时不依赖库吗?

我了解运行时和编译时之间的区别以及如何区分两者,但是我只是看不到需要区分编译时和运行时 。

我正在cho的是:程序如何在运行时 不依赖 编译期间 依赖

的东西?如果我的Java应用程序使用log4j,则它需要log4j.jar文件才能进行编译(我的代码与log4j集成并从其中调用成员方法)以及运行时(我的代码绝对无法控制log4j内的代码一旦发生了什么.jar已运行)。

我正在阅读诸如Ivy和Maven之类的依赖项解析工具,这些工具显然可以区分这两种类型的依赖项。我只是不明白它的需要。

任何人都可以给出一个简单的“国王的英语”类型的解释,最好给出一个实际的例子,即使像我这样的可怜的树液也能理解?

回答:

通常在运行时需要编译时依赖项。在maven中,compile将在运行时将范围内的依赖项添加到类路径中(例如,在战争中,它们将被复制到WEB-INF /

lib中)。

但是,并非严格要求;例如,我们可以针对某个API进行编译,使其具有编译时依赖性,但随后在运行时包括一个也包含API的实现。

在某些情况下,项目需要一定的依赖性进行编译,但实际上并不需要相应的代码,但是这种情况很少见。

另一方面,包含编译时不需要的运行时依赖关系是很常见的。例如,如果您正在编写Java EE 6应用程序,则可以根据Java EE 6

API进行编译,但是在运行时,可以使用任何Java EE容器。这个容器提供了实现。

通过使用反射可以避免编译时依赖性。例如,可以使用来加载JDBC驱动程序,Class.forName并且可以通过配置文件来配置实际的类。

以上是 程序在编译过程中可以依赖库,但运行时不依赖库吗? 的全部内容, 来源链接: utcz.com/qa/410931.html

回到顶部