Настройка Java classpath и java home правильно в Ubuntu

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

исключение в потоке" main " java.ленг.Ошибке типа noclassdeffounderror:

когда я пытаюсь запустить скомпилированный класс в Ubuntu. Я использую очень простой пример Helloworld, и миллионы ответов, которые уже существуют в интернете, предполагают, что мои переменные CLASSPATH и JAVA_HOME были неправильно установлены.

тем не менее, я отредактировал etc / environment в правильные папки, а также текущий папка:

PATH=".:/usr/местные/sbin:/usr/местные/Бен: выполнить/sbin:/usr/Бен: файл/sbin:/bin: Белый каталог/usr/игры"

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

CLASSPATH=".: в/usr/lib в/в JVM или Java-1.5.0-солнце/Либ"

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

sudo java-cp . myfirstjavaprog.класс!--1-->

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

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

8 ответов


вы хотите бросить .класс с конца. Просто ввести...

java -cp . myfirstjavaprog

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

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

современная javas достаточно умны, что вы можете просто ввести java <classname> стоя в корневом каталоге пути к классам, и он будет просто работать™.


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

java -cp pathelement1:pathelement2... MyClass

вы даете java список мест для поиска классов runnable. Он больше нигде не будет искать, в том числе ".- если только вы сами не скажете. Поэтому "CLASSPATH" не поможет вам, если вы не запустите

java -cp $CLASSPATH MyClass

Inotherwords, его просто ярлык для ввода путь класса.

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

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


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

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

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

  1. это артефакт Java 1.0, который попал в немилость.
  2. JVM не гарантирует, что вы установили его в качестве среды переменная.
  3. IDE имеет свои собственные требования, поэтому они не полагаются на него.
  4. серверы приложений Java EE имеют свои собственные требования, поэтому они не полагаются на него.
  5. вы должны дать полный путь каждый раз, потому что каждый проект, вероятно, будет отличаться. Как только вы пройдете мимо "Hello, World", вы обнаружите, что пишете его или используете такие инструменты, как Ant и Maven, которые помогут вам установить путь к классам для вашего проекта.

использовать

sudo update-java-alternatives -s java-6-openjdk

Он устанавливает много вещей classpath.


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

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

и

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


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

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


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

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

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

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

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