从jar导入java库类时,这被认为是静态链接吗?还是动态的?

时间:2011-01-26 14:22:21

标签: java dynamic static linker jar

我的lib文件夹中有jcifs-1.3.14.jar,我有一个从库中导入并使用类的类:

import jcifs.smb.*;
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(domain, 
                                                                 user, 
                                                                 pass);
SmbFile file = new SmbFile(path, auth);
// do some operations with the file here

以这种方式使用库时,它被认为是:A)静态链接或B)动态链接或C)其他东西?

3 个答案:

答案 0 :(得分:14)

如果您正在寻找有关在Java程序上应用各种软件许可证的信息,那么在Google上搜索<license name> Java通常会产生有用的效果。

例如LGPL Javathis是第一次点击。在这种特殊情况下,底线是:

  

链接到LGPL的应用程序   图书馆不需要发布   LGPL。仅需申请   遵循第6节的要求   LGPL:允许新版本的   要与之链接的库   应用;并允许反向   工程来调试这个。

即。只要库是在一个可以轻松替换的单独JAR文件中提供的,LGPL允许它。

PS:我不是律师!如有疑问,请咨询一个。事实上,根据你居住的地方,无论你是否有疑问,都可以咨询一下。

答案 1 :(得分:9)

Java中不存在静态与动态,如C ++中所示。所有类在引用时都会加载到JVM中,因此您需要认为Java中的所有导入(包括反射)都是动态的。

是的,那个。*很糟糕,因为它引用了该包中的所有类。

答案 2 :(得分:4)

好吧,您不会将库中的代码编译到您的java类中。您编译的类按名称引用其他库中的类。需要时,类由类加载器加载。它更类似于动态链接。

从许可的角度来看 - 例如LGPL许可证,应视为动态链接。在那种情况下,我从未听说过任何法律程序(虽然我已经搜索过了),但它很有道理,我很期待它,因为很多开发人员对它有点担心。