Problema con CLASSPATH

lingurik
03 de Septiembre del 2009
Hola. Gracias de antemano, mi problema es el siguiente, estoy leyendo el libro Piensa en Jva, 4ª edición, y en el capítulo 3, el primer ejercicio me pide que haga un programa sencillo, que consiste en utilizar

System.out.println() ;

y también

Print() ;

El programa es básico como el solo:

import static net.mindview.util.Print.* ;

public class cap0301 {
public static void main ( String[] args ) {
print( "Línea impresa con Print()" ) ;
System.out.println( "Línea impresa con System.out.println()" ) ;
}
}

La clase Print() está en la carpeta c:javaTIJ4-codenetmindviewutil

No da ningún problema de compilación, CLASSPATH está bien inicializado, pero antes ya tenía puesto el fichero c.bat para compilar con la línea

javac -cp c:javatij4-code %1

así me ahorro repetir líneas de comando.

Ahora bien, el problema es que se compila bien, pero no me permite ejecutarlo, ni con

java cap0301

ni con

java -cp c:javatij4-code cap0301

en el primer caso da el error siguiente:

Exception in thread "main" java.lang.NoClassDefFoundError: net/mindview/util/Print
at cap0301.main(cap0301.java:15)
Caused by: java.lang.ClassNotFoundException: net.mindview.util.Print
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 1 more

y en el segundo caso da el siguiente mensaje de error:

C:Java>java -cp c:javatij4-code cap0301
Exception in thread "main" java.lang.NoClassDefFoundError: cap0301
Caused by: java.lang.ClassNotFoundException: cap0301
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: cap0301. Program will exit.

En el primer caso, entiendo que pueda producirse error al no acceder através de CLASSPATH (que tiene como valor CLSSPATH=c:javatij4-code; y debería funcionar) pero en el segundo caso, es que no le veo ningún sentido por que se le indica la ruta de acceso, y el fichero Print.class existe en la carpeta c:javatij4-codenetmindviewutil

Si alguien me puede indicar que es lo que hago mal, o donde está el error al escribir, o en classpath, o donde sea, gracias y mil gracias, llevo dos días con esta bobadita y no se ya ni que probar.

lingurik
03 de Septiembre del 2009
Hola, yo mismo me respondo :)

la solución era tan simple como cambiar

set CLASSPATH = c:javatij4-code;

por

set CLASSPATH=c:javatij4-code

dejar un espacio antes y después del '=' hace que se reconozca bien o mal la variable de entorno, curioso, pero cierto. Espero que le sirva a quienes tengan algún problema similar.