赞成使用其中任何一个的概念是什么?
我实际上在项目属性>下的Netbeans中看到了它。 Java应用程序库。我们有两个选项卡,一个用于编译时库和运行时库,看起来我们可以将库添加到彼此独立的
答案 0 :(得分:11)
没有编译时库与运行时库
这样的东西也许你正在混合一些概念。
在Java中,要使用的库在编译时进行静态验证,并在运行时进行验证。
例如,如果您想使用Apache Collections库中指定的IterableMap
。编译器验证“在编译时”您正在调用该类中存在的方法。
但是编译器没有链接或对该库做任何事情,你仍然需要它在运行时。因此,当您的代码执行时,Java运行时会再次搜索该类,并调用编译器验证的方法。
那是什么。
答案 1 :(得分:7)
“库”属性对话框的UI和术语非常混乱。
该对话框上的“帮助”按钮将为您提供相当多的信息。
编译时库列表可能是运行时库列表的一个子集。
考虑这种情况......
您拥有从库'widgets.jar'导入类的源代码。 widgets.jar中的类文件引用jar文件'xml.jar'中的符号。如果源代码不从xml.jar导入类,则可以将编译时库列表定义为仅包含widgets.jar。
当您尝试运行项目时,可能需要在运行时库列表中包含xml.jar以防止ClassNotFoundException。
答案 2 :(得分:1)
或许,当您想要动态加载库,或者检查库是否存在然后执行代码时,这就会发挥作用。
在编译期间,编译器需要知道方法,类等的签名,以了解代码是否正确。因此,您添加了编译时库。
在运行时,JVM仍然需要库来运行该特定代码。但是你可以通过检查库是否存在来放置逻辑以避免代码,例如通过执行Class.for()
方法。某些库可能已经存在于系统中(例如qt.jar)或者可能不存在,您可以相应地检查和执行代码。
如果我错了,请纠正我。
答案 3 :(得分:0)
正如其他人所说,你是一个令人困惑的概念。我认为你真正想要理解的是Maven所指的dependency scope。有时您只需要在编译时使用依赖项,因为您希望它在运行时提供,有时您需要在运行时但不需要编译时。