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

15

Скажем, у меня есть 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) что-то еще?

    
задан Jim Ford 26.01.2011 в 15:22
источник
  • Ни то, ни другое не считается зависимым –  tim_yates 26.01.2011 в 15:24
  • Я думаю, что это может иметь значение для некоторых лицензий. Я был вовлечен в случай, когда библиотека была LGPL, поэтому вызывающая сторона динамически связывалась, чтобы избежать вирусной лицензии - статическая привязка приведет к тому, что их код будет соответствовать требованиям LGPL –  peter.murray.rust 26.01.2011 в 15:31
  • , так как java делает это динамически, лицензионная библиотека LGPL может использоваться в коммерческом продукте, не заставляя вызывающий код быть LGPL? –  Jim Ford 26.01.2011 в 15:33
  • спасибо за комментарии ребята, очень полезно. –  Jim Ford 26.01.2011 в 15:48

3 ответа

10

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

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

  

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

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

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

    
ответ дан thkala 26.01.2011 в 15:37
  • И если вы работаете в компании, и это часть вашей работы, есть вероятность, что существует некоторая политика компании, регулирующая ее. –  biziclop 26.01.2011 в 21:39
7

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

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

    
ответ дан Ilya Saunkin 26.01.2011 в 15:31
  • да. * просто для сокращения образца кода –  Jim Ford 26.01.2011 в 15:37
  • Круто. Я думал, что это часть вопроса. –  Ilya Saunkin 26.01.2011 в 15:45
  • Um, операторы импорта не включены в скомпилированный байт-код. Все ссылается на его полное имя. Проблема с импортом пакета. * - высокий потенциал для именования конфликтов. –  ILMTitan 26.01.2011 в 16:50
3

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

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

    
ответ дан FolksLord 26.01.2011 в 21:32