Ошибка: не удалось найти или загрузить основной класс с OpenJDK и Oracle Java на CentOS 7

Ошибка: не удалось найти или загрузить основной класс с OpenJDK и Oracle Java на CentOS 7

На CentOS 7.2 Linux я успешно загрузил и установилOracle Джавас:

# rpm -Uvh jdk-8u91-linux-x64.rpm

Также уже установлен 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

Я могу переключаться между ними с помощью этой команды:

# 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:

И посмотрите версию с:

# 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

Теперь к моей проблеме, пожалуйста.

Я создаю простой файл Java с именем TheClassName.java:

package thepackagename;

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

После успешной компиляции javac TheClassName.java(которая создает TheClassName.classфайл в той же директории) я, к сожалению, не могу его запустить:

# java -cp . thepackagename.TheClassName
Error: Could not find or load main class thepackagename.TheClassName

Вот еще одна попытка:

# 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

Установка другой переменной среды также не помогает:

# export CLASSPATH=.

Аналогичная команда в Windows 7 работает хорошо, и я пробовал скопировать файл TheClassName.classоттуда в Linux.

Пожалуйста, помогите и, пожалуйста, не предлагайте отмечать этот вопрос как дубликат, потому что, как вы видите выше, я уже перепробовал большинство предложений.

SELINUX отключен ( SELINUX=disabled), а сервер был установлен несколько недель назад и работает (без ошибок) как LAMP с MySQL/PostgreSQL/Apache/WordPress.

ОБНОВЛЯТЬ:

Да, мне пришлось переместить файл класса в thepackagenamedir, и тогда все заработало:

# ls thepackagename
TheClassName.class

# java -cp . thepackagename.TheClassName
Hello World!

Я даже могу создать test.jarфайл, и он все еще работает:

# zip -r test.jar thepackagename
  adding: thepackagename/ (stored 0%)
  adding: thepackagename/TheClassName.class (deflated 31%)

# java -cp test.jar thepackagename.TheClassName
Hello World!

решение1

Если класс находится в пакете:

package thepackagename;

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

Тогда вызов из неправильного каталога приводит к следующему:

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

Его необходимо называть полным именем:

java -classpath . thepackagename.TheClassName

И эта команда должна быть вызвана изтот же каталогв котором thepackagenameсуществует каталог. Это означает, что вам нужно создать новый каталог с именем thepackagenameи перейти TheClassName.classв него, а затем выполнить указанную выше команду из родительского каталога каталога thepackagename.

Связанный контент