¿Como utilizar paquetes?

astur_racing
08 de Marzo del 2005
Estoy haciendo un programa utilizando reflectividad, mi problema es que mi programa esta dentro de un proyecto (paquete) y cuando intento ejecutar la orden:
clase = Class.forName(IdElementoActual);
No me reconoce el nombre de ninguna clase, pero cuando tengo las clases fuera del proyecto no me da ningun problema. ¿Como puedo solucionar el problema utilizando proyectos?
¿Me hace falta utilizar alguna orden tipo: uses namespace Proyecto y si es asi, cual es esa orden?

Muchas gracias.

David
08 de Marzo del 2005
Hola

No existe 'uses namespace' en Java. Los paquetes se traducen en directorios físicos en el sistema de archivos del sistema. Es decir, si tienes una clase tal que así:

package test;

public class Test {
...
}

Para referirte a esta clase desde otra en el mismo paquete o el otro conviene utilizar el nombre totalmente cualificado, de este tipo:

clase = Class.forName("test.Test");

Lo que ocurre aquí es que el archivo Test.class generado debe encontrarse dentro de un directorio llamado test, y éste a su vez en alguno de los directorios indicados por la variable de entorno CLASSPATH.

Una solución muy elegante consiste en añadir al CLASSPATH el directorio activo:

Win
CLASSPATH = %CLASSPATH%;.

Ux
CLASSPATH=$CLASSPATH;.

De este modo, te basta con tener el directorio test donde guardar las clases del paquete test en el directorio desde el cual compiles y/o ejecutes las otras clases.

Otra solución es tener siempre un directorio donde crees tus proyectos, por ejemplo:

proyectos

En este directorio creas dos directorios:

proyectosfuente
proyectosclases

(Como hacen casi todos los entornos de desarrollo, ¿ves?)

Y dentro de fuentes vas creando los archivos fuente de tus clases dentro de directorios con el mismo nombre que el paquete en el que las creas.

Finalmente, para compilar, utilizas la orden:

javac -classpath "proyectosclases" -d "proyectosclases" [NombreClase].java

así queda todo en su sitio al compilar, y para ejecutar, la orden

java -classpath "proyectosclases" [NombreClase]

Por último, que sepas que conviene siempre crear las clases dentro de paquetes. Te obligan a ser un poco más ordenado.

Salud

David