2011-01-26 11 views
15

decir que tengo JCIFS-1.3.14.jar en mi carpeta de la liberación, y tengo una clase que está importando de la biblioteca y utiliza las clases como:Al importar una clase de biblioteca java desde jar, ¿esto se considera enlace estático? o dinámico?

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

Cuando se utiliza la biblioteca de esta manera es que se considera que es: A) Enlace estático O B) Enlace dinámico O C) ¿Algo más?

+1

Ni, se considera una dependencia –

+2

creo que puede importar para algunas licencias. He estado involucrado en un caso en el que una biblioteca era LGPL y la persona que llamaba se vinculó dinámicamente para evitar la licencia viral: la vinculación estática haría que su código fuera compatible con LGPL –

+0

, porque java lo hace dinámicamente y puede usarse una licencia con licencia LGPL en una producto comercial sin forzar que el código de llamada sea LGPL? –

Respuesta

10

Si está buscando información acerca de la aplicación de diversas licencias de software en los programas de Java, a continuación, buscar en Google de <license name> Java por lo general resulta en un golpe de utilidad.

por ejemplo para LGPL Java, this es el primer golpe. En este caso particular, la conclusión es:

Las aplicaciones que enlazan con LGPL bibliotecas no tienen que ser liberados bajo la LGPL. Las aplicaciones necesitan solamente Siga las instrucciones de la sección 6 de la LGPL: permitir que las nuevas versiones de la biblioteca a vincularse con la aplicación ; y permitir la ingeniería inversa para depurar esto.

es decir, siempre que la biblioteca se proporcione en un archivo JAR separado que pueda ser reemplazado fácilmente, LGPL lo permite.

PD: ¡No soy abogado! En caso de duda, consulte uno. De hecho, dependiendo de dónde viva, podría tener sentido consultarlo independientemente de si tiene dudas o no.

+0

Y si trabaja para una empresa y esto es parte de su trabajo, es posible que también exista alguna política de la compañía que lo rija. – biziclop

7

Estático vs dinámico como en C++ no existe en Java. Todas las clases se cargan en JVM a medida que se referencian, por lo que querría pensar que todas las importaciones (esto incluye reflexiones) en Java son dinámicas.

Y sí, eso. * Es malo precisamente porque hace referencia a todas las clases de dicho paquete.

+0

sí el. * Es solo para abreviar el código de muestra –

+0

Cool. Pensé que era parte de la pregunta. –

+6

Um, las declaraciones de importación no están incluidas en el código de byte compilado. Todo está referenciado por su nombre completo. El problema con la importación de paquetes. * Es el alto potencial para nombrar conflictos. – ILMTitan

3

Bueno, no compila el código de la biblioteca en sus clases de Java. Sus clases compiladas hacen referencia a las clases de otra biblioteca por su nombre. Cuando es necesario, la clase es cargada por el cargador de clases. Es más similar a la vinculación dinámica.

Desde el punto de vista de la licencia - f.g. Licencia LGPL, debe considerarse como un enlace dinámico. Nunca he oído hablar de ningún procedimiento legal en ese caso (aunque lo he buscado), pero es muy propagable, lo estoy esperando, porque muchos desarrolladores están un poco ansiosos al respecto.

Cuestiones relacionadas