Java 中的编译时依赖和运行时依赖有什么区别? 和类路径有关,但是它们有什么区别呢?
最佳答案
编译时依赖项:您需要
CLASSPATH
中的依赖项来编译您的工件。它们的产生是因为您对代码中硬编码的依赖项有某种“引用”,例如为某个类调用new
、扩展或实现某些东西(直接或间接)或方法调用使用直接reference.method()
表示法。运行时依赖项:您需要
CLASSPATH
中的依赖项来运行您的工件。它们的产生是因为您执行访问依赖项的代码(以硬编码方式或通过反射或其他方式)。
虽然编译时依赖通常意味着运行时依赖,但您也可以只拥有编译时依赖。这是基于 Java 仅在第一次访问该类时链接类依赖项的事实,因此如果您在运行时从不访问特定类,因为代码路径从未被遍历,Java 将忽略该类及其依赖项。
这个例子
在 C.java 中(生成 C.class):
package dependencies;
public class C { }
在A.java中(生成A.class):
package dependencies;
public class A {
public static class B {
public String toString() {
C c = new C();
return c.toString();
}
}
public static void main(String[] args) {
if (args.length > 0) {
B b = new B();
System.out.println(b.toString());
}
}
}
在这种情况下,A
通过 B
对 C
有编译时依赖,但它只会有运行时依赖如果在执行 java dependencies.A
时传递一些参数,则在 C 上,因为 JVM 只会尝试解决 B
对 C
的依赖它开始执行B b = new B()
。此功能允许您在运行时仅提供您在代码路径中使用的类的依赖关系,而忽略工件中其余类的依赖关系。
关于java - 编译时间与运行时间依赖关系 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4270950/