При импорте класса java-библиотеки из jar это считается статическим связыванием? или динамический?

Скажем, у меня есть jcifs-1.3.14.jar в моей папке lib, и у меня есть класс, который импортируется из библиотеки и использует классы, такие как:

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) что-то еще?

Ответы

Ответ 1

Если вы ищете информацию о применении различных лицензий на программное обеспечение на Java-программах, поиск Google для <license name> Java обычно приводит к полезному результату.

Например, для LGPL Java, этот является первым хитом. В этом конкретном случае нижняя строка:

Приложения, которые ссылаются на LGPL библиотеки не должны выпускаться под LGPL. Приложения нужны только соблюдать требования раздела 6 LGPL: разрешить новые версии библиотеку, связанную с выражение; и разрешить чтобы отладить это.

т.е. до тех пор, пока библиотека предоставляется в отдельном файле JAR, который может быть легко заменен, LGPL позволяет это.

PS: Я не юрист! Если есть сомнения, проконсультируйтесь с ним. На самом деле, в зависимости от того, где вы живете, имеет смысл проконсультироваться с ним, независимо от того, имеете ли вы сомнение или нет.

Ответ 2

Статический и динамический, как в С++, не существует в Java. Все классы загружаются в JVM по мере их ссылки, поэтому вы должны думать, что все импортные (включая отражения) в Java динамические.

И да, это. * плохо, потому что он ссылается на все классы в этом пакете.

Ответ 3

Ну, вы не компилируете код из библиотеки в свои классы java. Скомпилированные классы ссылаются на классы из другой библиотеки по имени. Когда это необходимо, класс загружается загрузчиком классов. Это больше похоже на динамическое связывание.

С точки зрения лицензирования - например. LGPL, его следует рассматривать как динамическое связывание. Я никогда не слышал о каком-либо законе в этом случае (хотя я искал его), но это очень удобно, я с нетерпением жду этого, потому что многие разработчики немного беспокоятся об этом.