
No CentOS 7.2 Linux eu baixei e instalei com sucessoOráculo Javacom:
# rpm -Uvh jdk-8u91-linux-x64.rpm
Também já existe o OpenJDK instalado:
# 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
Posso alternar entre os 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:
E veja a versão com:
# 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
Agora, para o meu problema, por favor -
Eu crio um arquivo java simples chamado TheClassName.java
:
package thepackagename;
public class TheClassName {
public static final void main(String[] args) {
System.out.println("Hello World!");
}
}
Depois de compilá-lo com sucesso javac TheClassName.java
(que produz TheClassName.class
o arquivo no mesmo diretório), infelizmente não consigo executá-lo:
# java -cp . thepackagename.TheClassName
Error: Could not find or load main class thepackagename.TheClassName
Aqui está outra tentativa:
# 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
Definir outra variável de ambiente também não ajuda:
# export CLASSPATH=.
Comando semelhante no Windows 7 funciona bem e tentei copiar o TheClassName.class
arquivo de lá para o Linux também.
Por favor, ajude e não sugira marcar esta pergunta como duplicada, pois como você pode ver acima, já tentei a maioria das sugestões.
O SELINUX está desligado ( SELINUX=disabled
) e o servidor foi instalado há algumas semanas, servindo (sem erros) como LAMP com MySQL/PostgreSQL/Apache/WordPress.
ATUALIZAR:
Sim, tive que mover o arquivo de classe para thepackagename
dir e então funcionou:
# ls thepackagename
TheClassName.class
# java -cp . thepackagename.TheClassName
Hello World!
Posso até criar um test.jar
arquivo e ainda funciona agora:
# zip -r test.jar thepackagename
adding: thepackagename/ (stored 0%)
adding: thepackagename/TheClassName.class (deflated 31%)
# java -cp test.jar thepackagename.TheClassName
Hello World!
Responder1
Se a classe estiver em um pacote:
package thepackagename;
public class TheClassName {
public static final void main(String[] args) {
System.out.println("Hello World!");
}
}
Então chamá-lo do diretório errado resulta em:
Error: Could not find or load main class thepackagename.TheClassName
Deve ser chamado com seu nome totalmente qualificado:
java -classpath . thepackagename.TheClassName
E este comando deve ser chamado a partir domesmo diretórioem que o thepackagename
diretório existe. Isso significa que você deve criar um novo diretório chamado thepackagename
e movê-lo TheClassName.class
para ele e, em seguida, executar o comando acima no diretório pai do thepackagename
diretório.