
En CentOS 7.2 Linux lo descargué e instalé exitosamenteOráculo Javacon:
# rpm -Uvh jdk-8u91-linux-x64.rpm
Además ya está instalado OpenJDK:
# rpm -qa | grep -i jdk
java-1.8.0-openjdk-headless-1.8.0.91-0.b14.el7_2.x86_64
java-1.8.0-openjdk-1.8.0.91-0.b14.el7_2.x86_64
jdk1.8.0_91-1.8.0_91-fcs.x86_64
Puedo cambiar entre los 2 usando este comando:
# alternatives --config java
There are 2 programs which provide 'java'.
Selection Command
-----------------------------------------------
* 1 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.91-0.b14.el7_2.x86_64/jre/bin/java
+ 2 /usr/java/jdk1.8.0_91/jre/bin/java
Enter to keep the current selection[+], or type selection number:
Y mira la versión con:
# java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
# javac -version
javac 1.8.0_91
Ahora a mi problema, por favor.
Creo un archivo java simple llamado TheClassName.java
:
package thepackagename;
public class TheClassName {
public static final void main(String[] args) {
System.out.println("Hello World!");
}
}
Después de compilarlo exitosamente javac TheClassName.java
(lo que produce TheClassName.class
un archivo en el mismo directorio), desafortunadamente no puedo ejecutarlo:
# java -cp . thepackagename.TheClassName
Error: Could not find or load main class thepackagename.TheClassName
Aquí otro intento:
# export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.91-0.b14.el7_2.x86_64/jre
# $JAVA_HOME/bin/java -cp . thepackagename.TheClassName
Error: Could not find or load main class thepackagename.TheClassName
Establecer otra variable de entorno tampoco ayuda:
# export CLASSPATH=.
Un comando similar en Windows 7 funciona bien y también intenté copiar el TheClassName.class
archivo desde allí a Linux.
Por favor ayude y no sugiera marcar esta pregunta como duplicada, porque como ve arriba, ya probé la mayoría de las sugerencias.
El SELINUX está apagado ( SELINUX=disabled
) y el servidor fue instalado hace unas semanas, sirviendo (sin errores) como LAMP con MySQL/PostgreSQL/Apache/WordPress.
ACTUALIZAR:
Sí, tuve que mover el archivo de clase al thepackagename
directorio y luego funciona:
# ls thepackagename
TheClassName.class
# java -cp . thepackagename.TheClassName
Hello World!
Incluso puedo crear un test.jar
archivo y todavía funciona ahora:
# zip -r test.jar thepackagename
adding: thepackagename/ (stored 0%)
adding: thepackagename/TheClassName.class (deflated 31%)
# java -cp test.jar thepackagename.TheClassName
Hello World!
Respuesta1
Si la clase está en un paquete:
package thepackagename;
public class TheClassName {
public static final void main(String[] args) {
System.out.println("Hello World!");
}
}
Luego, llamarlo desde el directorio incorrecto da como resultado:
Error: Could not find or load main class thepackagename.TheClassName
Debe llamarse con su nombre completo:
java -classpath . thepackagename.TheClassName
Y este comando debe ser llamado desde elmismo directorioen el que thepackagename
existe el directorio. Esto significa que debe crear un nuevo directorio llamado thepackagename
y entrar TheClassName.class
en él, luego ejecutar el comando anterior desde el directorio principal del thepackagename
directorio.