Foros del Web » Programación para mayores de 30 ;) » Java »

importar librerias condicionalmente

Estas en el tema de importar librerias condicionalmente en el foro de Java en Foros del Web. Hay manera de saber si existe una libraria antes de intentar cargarla? Estoy haciendo un plugin, que depende en parte de cierta libreria que algunos ...
  #1 (permalink)  
Antiguo 17/06/2010, 08:17
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
importar librerias condicionalmente

Hay manera de saber si existe una libraria antes de intentar cargarla?

Estoy haciendo un plugin, que depende en parte de cierta libreria que algunos usuarios tienen y otros no.
  #2 (permalink)  
Antiguo 17/06/2010, 08:51
 
Fecha de Ingreso: abril-2010
Ubicación: La Aldea, Silao, Guanajuato
Mensajes: 16
Antigüedad: 14 años
Puntos: 0
Respuesta: importar librerias condicionalmente

Si hay manera si trabajas en Net Beans Vas a Tools o Herramientas segun el idioma y ahi es donde encuentras las librerias qe tienes
  #3 (permalink)  
Antiguo 17/06/2010, 08:54
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: importar librerias condicionalmente

Me refiero mas a la hora de correr el programa, y no a la hora de compilar.

Para compilar estoy usando el and, definiendo dos librerias en el classpath. Pero no se si los usuarios van a contar con esa segunda libreria, comprendes?
  #4 (permalink)  
Antiguo 17/06/2010, 09:22
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: importar librerias condicionalmente

Si la forma de definir las librerias la puedes definir tu, existe una clase nueva en Java 6 llamada ServiceLoader que se usa para recuperar las clases que hay en el classpath que implementen una interfaz dada.

La forma "rupestre" de hacerlo es hacer un Class.forName() de una clase que esté seguro en el .jar y si da un error, es que el .jar no está en el classpath.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #5 (permalink)  
Antiguo 17/06/2010, 09:41
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: importar librerias condicionalmente

Gracias. Todavía no me queda del todo claro. forName() daría error si no encontrara la clase definida en el classpath. Y de echo va a dar error a aquellos usuarios que no hayan descargado aún la librería en cuestion:
Cita:
java.lang.Class forName(String className): Carga una clase del classpath a partir de su nombre (nombre completo, con todos los paquetes. Si la clase no se puede cargar, porque no se encuentra en el classpath, se lanzará una java.lang.ClassNotFoundException.
Se puede manejar ese error?

Acerca del ServiceLoader todavía no se nada. Veremos!
  #6 (permalink)  
Antiguo 17/06/2010, 10:27
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: importar librerias condicionalmente

Lo que se hace es envolver el Class.forName con un try/catch y capturar el error. A grosso modo, algo como...
Cita:
boolean existeJar = false;
try
{
Class.forName("paq.quete.ClaseDelJar");
existeJar = true;
}
catch(Exception e)
{
// Aquí se podría poner una traza con la excepción, por si acaso
// para que quede constancia y saber el tipo de excepcion que dió.
}
Y así averiguas si está cargado o no.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #7 (permalink)  
Antiguo 17/06/2010, 10:37
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: importar librerias condicionalmente

Ah! buenísimo. Es decir que no tengo que importar la librería como hago con las demas, sino pasar a usar el forName(). Entendí. Gracias!

Cita:
boolean existeJar = false;
try
{
Class.forName("artofillusion.polymesh.*");
Class.forName("artofillusion.polymesh.PolyMesh.*") ;
existeJar = true;
}
catch(Exception e) {}
  #8 (permalink)  
Antiguo 17/06/2010, 11:18
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: importar librerias condicionalmente

Te basta con una clase que esté dentro del jar para saber si existe o no. Eso sí, el Class.forName no sustituye a un import. Son para cosas diferentes.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #9 (permalink)  
Antiguo 17/06/2010, 11:23
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: importar librerias condicionalmente

Ok. Esta claro. Creía que el import causaría errores, pero ya probé y no.

Te agradezco muchísimo!

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:17.