Предположим, что для проекта используется следующая структура папок: ProjectName / src / имя_пакета
Все исходные файлы, необходимые для компиляции, находятся в папке имя_пакета .
При попытке скомпилировать программу из папки имя_пакета с помощью команды java ClassName
возникает ошибка ( java.lang.NoClassDefFoundError ).
С другой стороны, аналогичная команда, используемая в папке src (java package_name/ClassName
), правильна.
В моем понимании это потому, что
Если -classpath и -cp не используются, а CLASSPATH не задан, путь к классу пользователя состоит из текущего каталога (.).
Однако в ProjectName / src / package_name , java -cp .. ClassName
дает вышеупомянутую ошибку, хотя я считаю, что она должна быть эквивалентна java -cp . package_name/ClassName
в одном каталоге выше.
Аналогично, при попытке запустить программу из разных мест на диске (используя обаместный и абсолютный рая получаю такую же ошибку.
Есть идеи, почему?
РЕДАКТИРОВАТЬ:
Что такое поразительный, команда java -cp .. package_name/ClassName
(а также ее аналог с ".", Который дает тот же результат) теперь бросаетдругая ошибка.В ProjectName / files у меня есть несколько файлов .txt, которые моя программа читает, и вышеупомянутая команда выдает FileNotFoundException, в то время как java package_name/ClassName
из каталога src - нет.Это означает, что каталог, из которого вы запускаете файл, влияет на точку, в которой вычисляется относительный путь.Это так?