Problema con CLASSPATH
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.
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.
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.
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.