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

говорят, что у меня в папке 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 ]

16 голосов
/ 26 января 2011

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

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

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

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

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

9 голосов
/ 26 января 2011

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

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

4 голосов
/ 26 января 2011

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

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

...