微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

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

另一方面,包含编译时不需要的运行时依赖关系是很常见的。例如,如果您正在编写Java EE 6应用程序,则可以根据Java EE 6 API进行编译,但是在运行时,可以使用任何Java EE容器。这个容器提供了实现。

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

解决方法

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。