Установка пути к классу Java и java_home правильно в Ubuntu

Я получаю ошибку

Исключение в потоке "основной" java.lang. NoClassDefFoundError:

Когда я пытаюсь выполнить скомпилированный класс на Ubuntu. Я использую очень простой пример Helloworld и миллионы ответов, которые уже существуют в Интернете, предполагают, что мой ПУТЬ К КЛАССУ и переменные JAVA_HOME были неправильно установлены.

Однако я отредактировал и т.д./среда к корректным папкам, а также текущей папке:

СОЕДИНИТЕ КАНАЛОМ = ".:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

JAVA_HOME = "/usr/lib/jvm/java-1.5.0-sun /"

ПУТЬ К КЛАССУ = ".:/usr/lib/jvm/java-1.5.0-sun/lib"

и они появляются, когда я ввожу команду набора. В любом случае, даже когда я установил путь к классу вручную с помощью

Java sudo - CP. myfirstjavaprog.class

Я получаю ту же ошибку. Где еще я должен посмотреть? Это должно быть проблемой конфигурации.

Большое спасибо

9
задан Huguenot 29 December 2009 в 17:01
поделиться

7 ответов

Вы хотите отказаться от .class в конце. Просто введите...

java -cp . myfirstjavaprog
6
ответ дан 4 December 2019 в 14:28
поделиться

Я настоятельно рекомендую вам потратить немного времени на изучение Солнца. Это поможет вам позже - Пути классов - печально известные создатели проблем.

http://java.sun.com/docs/books/tutorial/getStarted/TOC.html

0
ответ дан 4 December 2019 в 14:28
поделиться

Хорошо, я искал проблему не в том месте. Оказалось, что Java в порядке, и я стал жертвой одной и той же ошибки для двух отдельных проблем.

Изначально я пытался запустить свинговый пример, который я получил с сайта Java, но не заметил, что в нем есть определение пакета. Я установил правильную структуру папок и теперь он работает нормально.

Когда я пытался запустить пример HelloWorld, я случайно включил расширение .class.

Обе эти проблемы дали мне ошибку ClassNotFound.

Большое спасибо за всю вашу помощь.

0
ответ дан 4 December 2019 в 14:28
поделиться

Вы смешиваете яблоки и апельсины. Сырой java или javac вызов в командной строке нуждается в класспате, чтобы знать, где он может получить доступ к своим классам. Когда вы запускаете

java -cp pathelement1:pathelement2... MyClass

, вы даете java список мест, где можно найти выполняемые классы. Он не будет искать нигде, включая "...", если только вы не скажете ему. Таким образом, "CLASSPATH" не поможет вам, если вы не запустите

java -cp $CLASSPATH MyClass

Inotherwords, это просто ярлык, чтобы сохранить необходимость перепечатывать класспат.

Многие программы настроены на использование JAVA_HOME, но, в конечном счете, для запуска java-программ нужен только настроенный путь к classpath и путь к java (они находят его через переменную JAVA_HOME, так что он все еще нужен для таких вещей, как муравей, но это' все еще концептуально просто ярлык).

ваш PATH - это путь, по которому система ищет двоичные файлы. Если java не находится на вашем пути (наберите "какой java", он покажет вам, какой java находится на вашем пути, если он есть), запуск /full/path/to/java идентичен простому запуску "java", и наличие в системе двоичного файла в переменной PATH.

.
1
ответ дан 4 December 2019 в 14:28
поделиться

для установки переменной java_home, вот инструкции.

http://luckydev07.blogspot.com/2009/08/setting-javahome-in-ubuntu-linux.html

и

classpath можно установить аналогично

.
0
ответ дан 4 December 2019 в 14:28
поделиться

Нет, я думаю, что переменные окружения CLASSPATH игнорируются.

Правильный способ сделать это - использовать опцию -classpath при компиляции и запуске. Установите ее для каждого проекта. Доказательства, которые у вас перед глазами, говорят о том, что это так.

Почему CLASSPATH игнорируется? Несколько причин:

  1. Это артефакт Java 1.0, который выпал из поля зрения.
  2. У JVM нет гарантии, что вы установили его в качестве переменной окружения.
  3. IDE имеют свои собственные требования, поэтому они не полагаются на него.
  4. Серверы приложений Java EE имеют свои требования, поэтому они не полагаются на него.
  5. Вы должны каждый раз указывать весь путь, потому что каждый проект, скорее всего, будет отличаться от других. Как только вы пройдете мимо "Hello, World", вы обнаружите, что вы написали сценарий или используете такие инструменты, как Ant и Maven, которые помогут вам установить CLASSPATH для вашего проекта.
1
ответ дан 4 December 2019 в 14:28
поделиться

Настоятельно рекомендую избавиться от переменной окружения CLASSPATH, или, по крайней мере, убрать из нее JRE/JDK.

"." неявно присутствует в класспате, если не указано иное. А начиная с Java 1.3, Java достаточно умна, чтобы найти своё собственное время выполнения и библиотеки, основанные на пути выполнения исполняемых файлов javac/java. С тех пор, было излишне, если не совсем неправильно, указывать их в classpath. Конечно .../lib некорректен, т.к. там только банки, никаких классов, и они не берутся из classpath, если они не имеют индивидуального и явного имени.

Современные javas достаточно умны, что вы можете просто набрать java , когда будете стоять в корневом каталоге classpath, и это будет просто Work™.

.
5
ответ дан 4 December 2019 в 14:28
поделиться
Другие вопросы по тегам:

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