Soporte para Librerías Compartidas en NetBeans 6.1

11abr08

Cuantas veces nos encontramos al compartir un proyecto con problemas de librerías no referenciadas? Ó, cuantas veces nos piden/tenemos que pedir las dependencias de un proyecto que fue compartido, finalmente pasando jars, javadoc, sources, explicaciones de cómo se tiene que llamar las librerías, etc.? Muchas veces el problema no es notorio si nosotros somos lo que lo compartimos, pero si al momento de recibir un proyecto y encontrar que algo falta para poder compilar el mismo.

Por suerte, desde NB 6.1 Beta podemos ver una luz en el horizonte: Sharable Libraries.

Veremos un repaso a los problemas comunes que nos encontramos hoy en día y como resolverlos con esta nueva característica incorporada en esta versión del IDE.

Conceptos Básicos

Antes de ver un ejemplo, nos adentrarnos en el tema repasaremos algunos conceptos.

Tipos de librerías

Existen tres tipos de librerías que se pueden insertar dentro de un proyecto de NetBeans:

  • Jar/Folder: Aquí directamente se indica un .jar que se quiere agregar al proyecto.
  • Project: Este tipo hace referencia a otro proyecto de NetBeans.
  • Library: Las librerías son conjuntos de .jar relacionados bajo un mismo nombre, facilitando su referenciación en un proyecto. Pueden incluir no solo los binarios, sino además Javadoc y Sources que nos ayudarán al momento de programar.

    Este tipo de librerías a su vez pueden ser de dos tipos: definidas por NB (definidas a la hora de instalar el IDE) o definidas por el usuario. Su configuración es guardado por en un archivo de definiciones de librerías.

    Por ejemplo, la librería JAX-WS 2.1 encapsula los siguientes jars:

Archivos de definición de librerías

Es un archivo de propiedades (.properties) o XML en el cual se guarda la definición de las librerías, por ejemplo:

libs.junit.classpath=${base}/junit/junit-3.8.2.jar

libs.junit.javadoc=${base}/junit/junit-3.8.2-api.zip

libs.junit_4.classpath=${base}/junit_4/junit-4.1.jar

libs.MyLibrary_01.classpath=${base}/AbsoluteLayout.jar

Hasta NB 6.0 solo existía un archivo de definición de librerías a nivel global del IDE, que hoy es conocido como Catalogo de Librerías.

A partir de NB 6.1 Beta se pueden crear y editar archivos de definición de librerías personalizados, creando repositorios para uno o más proyectos en particular. Esto permite poder compartir no solo el proyecto, sino además este junto con a definición de las librerías y las librerías propiamente dichas que utiliza.

Para editar un archivos de definición (ya sea el global o los personalizados) se debe acceder al Library Manager (desde el menú Tools->Libraries). Una vez que elegimos la localización del archivo de definiciones, podremos ver, definir una nueva, borrar ó modificar la definición de una librería:

Catálogo de Librerías

Como vimos anteriormente, el catalogo de librerías (ó Global Libraries) es el repositorio de librerías a nivel global del IDE. En él vienen definidas las librerías por defecto creadas al momento de realizar la instalación de NB y es el que utilizan todos los proyectos por defecto, salvo que indique un archivo de definición de librerías en particular.

Se puede acceder a él mediante el Library Manager eligiendo como localidad de la librería a “Global Libraries”:

En este caso no se ha agregado ninguna definición de librería nueva, pudiendo observar el listado de librerías definidas por defecto al instalar NB 6.1 Beta.

Estructura de archivos de un proyecto

Al crear un nuevo proyecto en NB (ya sea desde cero o a partir de código existente), por defecto este generará una estructura de archivos que permiten la mejor organización, por ejemplo:

Donde:

  • src: aquí se encuentra el código fuente de nuestra aplicación (.java)
  • test: aquí está el código fuente de las pruebas (.java)
  • build: aquí contiene los archivos generados por el compilador (.class)
  • dist: aquí se encuentran los archivos listos para distribuir (.jar y librerías)
  • nbproject: aquí NB guarda las configuraciones del proyecto
    • prívate: configuraciones propias del usuario

De los archivos que vemos en la figura, toma vital importancia el archivo build.xml, debido a que este es el script de Ant que configura todos los aspectos relacionados a la compilación del proyecto, indicando los pasos de construcción y empaquetado, ubicación de las librerías de dependencias, etc.

Compartiendo un proyecto

Básicamente existen dos tipos de destinatarios que pueden recibir un proyecto nuestro: otro usuario de NB o uno que no lo sea. Este último deberá valerse del script de Ant para poder realizar la compilación (build.xml).

Como podemos suponer, al compartir un proyecto, no es necesario compartir los directorios build y dist, ya que estos pueden ser generados a partir del código fuente (almacenado en src). Adicionalmente si el destinatario tiene NB no hará falta tampoco compartir el directorio con configuraciones del usuario (nbproject/private) ya que este se configurará al momento de abrir el proyecto.

Un caso extremo (e ideal a la hora de compartir) es un proyecto que no dependa de ninguna librería. No importa el tipo de destinatario del proyecto este no tendría que tener ninguna complicación a la hora de compilar y ejecutar la aplicación, ya que posee todo el código necesario y todas las librerías (es decir, ninguna).

Este no es el común de los casos, aunque sea para realizar test, para visualización, etc. siempre tendremos al menos un librería, y justamente los problemas comienzan cuando tenemos al menos una librería en el proyecto a compartir.

Los problemas más comunes que podemos tener a la hora de utilizar cada tipo de librería son los siguientes:

Librerías provistas por NB

Este tipo de librerías comúnmente no posee ningún problema entre usuarios del IDE debido a que estas librerías ya vienen definidas al instalar el mismo (salvo que la librería usada haya sido borrada del Catalogo Global). El problema que se lo encontrarán los usuarios que quieran compilar el proyecto directamente desde Ant, sin utilizar el IDE, ya que no podrán resolver las referencias a las librerías.

Librerías definidas por el usuario

Aquí la situación es la misma que la anterior para el usuario de Ant, ya que no posee la definición de las librerías.

Para otro usuario de NB que no posee las librerías definidas el IDE le indicará el problema, indicándole el nombre que debe poseer la librería que debe crear, pero no sabrá que jars incluye. En este punto es donde deberá contactarse con la persona que compartió el archivo para completar la definición de las librerías.

Un problema potencial adicional es si el usuario de NB posee definidas librerías con el nombre de las requeridas pero el contenido es totalmente diferente (jars que incluye), debiendo modificar la definición de la librería para solucionar el problema, pero seguramente trasladando los problemas al proyecto para el cual había creado la misma.

Jars

Los jars se agregan a un proyecto con paths relativos al proyecto, por lo que ambos tipos de usuario tendrán problemas si el jar en cuestión no se encuentra en la localización correcta.

Generalmente la forma de solucionar este problema hasta NB 6 era colocarlo dentro de la estructura del proyecto (en un directorio llamado lib por ejemplo), para que al compartir el proyecto el jar vaya dentro del mismo.

Otro proyecto de NB

Cuando un proyecto depende de otro ocurrirá la misma situación anterior, se utiliza el path relativo para referenciarlo, por lo que la localización del mismo será muy importante a la hora de compilar.

Otra vez, la forma de compartir los proyectos que dependen uno del otro debe hacerse de tal forma que el receptor luego no tenga problemas para reubicar los mismos en la forma adecuada. Tanto en NB 6.1 Beta como en las versiones anteriores este problema debe resolverse de esta forma, ya que la librería de la cual se depende es un proyecto en si mismo, no pudiéndose mover/copiar a una ubicación arbitrariamente.

Solución a los Problemas con NetBeans 6.1 Beta

NB 6.1 Beta resuelve los tres primeros casos vistos anteriormente creando un repositorio con todas las librerías (junto a su definición) y jars de los cual depende el proyecto.

El repositorio creado deberá ser compartido junto al proyecto.

El proyecto guarda un path relativo al repositorio, por lo que se debe elegir bien la posición donde se colocara (lo mismo que pasa al compartir un proyecto de NB que depende de otro).

Por ejemplo:

Para este ejemplo, tenemos en el directorio “ProyectoNB” el proyecto que vamos a compartir, mientras que en el directorio “libreries” el repositorio.

Dentro del directorio “Proyecto NB” tenemos la estructura de directorio de nuestro proyecto, y dentro de “libreries” tenemos la definición de las librerías (nblibreries.properties) junto con las librerías y jars requeridos por el proyecto.

Al momento de compartir lo que haríamos seria enviar el directorio “a_compartir” completo al destinatario.

Veremos un par de ejemplos para ver las pantallas que se ven implicadas en el proceso. También veremos que es muy fácil transformar un proyecto existente a compartido.

Ejemplo 1: Crear un proyecto nuevo preparado para ser compartido

En este ejemplo veremos como empezar de cero un nuevo proyecto compartido.

Creamos un nuevo proyecto:

Al llegar a este dialogo nos encontramos con dos nuevos agregados en NB 6.1 Beta:

  • A: Si chequeamos indicaremos explícitamente que el proyecto es un proyecto para compartir.
  • B: Al chequear A se habilita el textbox para indicar la ubicación que tendrá el repositorio de librerías. Mediante el botón “Browse…” nos facilita la búsqueda del lugar donde se encuentra un repositorio de librerías creado anteriormente.

Una vez aceptado este dialogo (haciendo click en Finish) se tendrá el proyecto listo para compartir.

Ejemplo 2: Pasar de un proyecto no compartido a hacerlo

En este ejemplo veremos como si tenemos un proyecto no compartido (nuevos o de versiones de NB previas a NB 6.1 Beta).

Al crear el nuevo proyecto no compartido:

C: Creamos el proyecto como no compartido (sin chequear la casilla)

Abrimos dentro del proyecto sus propiedades y revisamos las propiedades de las librerías:

Hacemos click en el botón se nos abrirá un dialogo de configuración del archivo de definición de librerías.

y luego de haber aceptado solo queda decir que acción se va a realizar con las librerías a las cuales el proyecto estaba apuntando.

NB nos preguntara que hacer, generalmente conviene “Use Existing Library in New Location”, ya que todas las librerías necesarias por el proyecto serán copiadas en el directorio de librerías, dejando el proyecto listo para ser compartido.

Saludos.

Hasta la próxima.

Más Info

About these ads


3 Responses to “Soporte para Librerías Compartidas en NetBeans 6.1”

  1. 1 Marcos

    Hola, yo uso NB 6.1

    Comprobé que se puede añadir como librería un fichero .jar que tenga solo *.class. NB muestra errores porque no puede acceder a los ficheros fuente. No se despliegan las listas con los métodos, etc.

    Sin embargo se ejecuta correctamente.

    Quería saber si hay alguna forma de compartir sólo las clases y que NB se comporte normalmente.

    Gracias.

  2. 2 Brown

    Yo querría subir todas mis librerias, con sus distintas versiones, a un repositorio ya existente en mi empresa, y que cada compañero pueda hacer lo mismo. Y el proceso inverso, coger del repositorio las librerias que le interesen a un directorio local para poder utilizarlas. ¿seria posible?

  3. @Marcos fijate podes compartir tanto las clases por separado como en un jar. Fijate si el problema que tenes no se produce por como está empaquetado el jar.

    @Brown Generalmente para ello se utiliza un repositorio en un servidor con subversion (u otro similar). Este será el encargado de sincronizar las diferentes versiones de los proyectos y librerías.

    En cada máquina se tiene un cliente de subversion que hace una copia local del repositorio. En la copia local se realizaran las modificaciones (como en cualquier otro proyecto local) y luego (al final del día, luego de agregar una nueva funcionalidad, etc) se envian los cambios al servidor, de forma que cuando un cliente de otro host se sincroniza con el servidor recibe los cambios.

    Algo importante a tener en cuenta es que NetBeans tiene clientes para svn, cvs y mercurial dentro de la instalación estandar, que ayudan en este proceso.

    Esto, mezclado con las librerías de NetBeans (que describe el post) pueden ayudar a simplificar mucho el tema de compartir librerías y proyectos.

    Saludos


Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

%d personas les gusta esto: