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

7005
Alexander Farber

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

# 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 

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

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

ОБНОВИТЬ:

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

# 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

1 ответ на вопрос

1
karel

If the class is in a package:

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

Then calling it from the wrong directory results in:

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

It must be called with its fully-qualified name:

java -classpath . thepackagename.TheClassName 

And this command must be called from the same directory in which the thepackagename directory exists. This means you have to create a new directory called thepackagename and move TheClassName.class into it, then run the above command from the parent directory of the thepackagename directory.

О, вы на 100% правы, и перемещение файла в `thepackagename / TheClassName.class` помогает (и, вероятно, делает мой вопрос дубликатом) ... Однако [моя настоящая программа] (https://github.com/afarber/ jetty-newbie / tree / master / WebsocketHandler), состоящий из нескольких jar-файлов, все еще не запускается. Я должен исследовать больше и задам отдельный вопрос. Alexander Farber 8 лет назад 0
Чтобы запустить файлы Java с внешним jar-файлом, запустите `java -cp.: / Path / to / jar / file MyCompiledFile`, где вы замените` / path / to / jar / file` на полный путь к вашему внешнему .jar-файлу. karel 8 лет назад 1

Похожие вопросы