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

Jim*_*ord 23 java linker static jar dynamic

说我在我的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
Run Code Online (Sandbox Code Playgroud)

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

thk*_*ala 16

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

例如LGPL Java,是第一次打击.在这种特殊情况下,底线是:

链接到LGPL库的应用程序不需要在LGPL下发布.应用程序只需遵循LGPL第6节的要求:允许新版本的库与应用程序链接; 并允许逆向工程来调试它.

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

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


Eli*_*ine 9

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

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

  • 嗯,import语句不包含在编译的字节码中.一切都以其全名引用.导入包.*的问题是命名冲突的可能性很高. (9认同)

Fol*_*ord 7

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

从许可的角度来看 - fg LGPL 许可,它应该被视为动态链接。我从未听说过在这种情况下有任何法律程序(尽管我已经搜索过),但它的可能性很高,我很期待,因为许多开发人员对此有点担心。