Erro: Não foi possível localizar ou carregar a classe principal com o OpenJDK e o Oracle Java no CentOS 7

1

No CentOS 7.2 Linux eu baixei e instalei com sucesso o Oracle Java com:

# 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

Eu 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 criei 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 com javac TheClassName.java (que produz o arquivo TheClassName.class 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 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 similar no Windows 7 funciona bem e eu tentei copiar o arquivo TheClassName.class de lá para o Linux também.

Por favor, ajude e, por favor, não sugira marcar essa questão como duplicada, porque, como você vê acima, eu 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.

ATUALIZAÇÃO:

Sim, eu tive que mover o arquivo de classe em thepackagename dir e depois funciona:

# ls thepackagename
TheClassName.class

# java -cp . thepackagename.TheClassName
Hello World!

Eu posso até criar um arquivo test.jar e ele 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!
    
por Alexander Farber 17.06.2016 / 12:40

1 resposta

1

Se a turma estiver em um pacote:

package thepackagename;

public class TheClassName {
        public static final void main(String[] args)  {
                System.out.println("Hello World!");
        }
}

Em seguida, chamá-lo do diretório errado resulta em:

Error: Could not find or load main class thepackagename.TheClassName

Ele deve ser chamado com seu nome totalmente qualificado:

java -classpath . thepackagename.TheClassName

E este comando deve ser chamado a partir do mesmo diretório no qual o diretório thepackagename existe. Isso significa que você precisa criar um novo diretório chamado thepackagename e mover TheClassName.class para ele, depois execute o comando acima no diretório pai do diretório thepackagename .

    
por 17.06.2016 / 13:15