-cp ./ Почему я всегда должен вручную включать CWD в CP при запуске Java?
У меня никогда не было такой проблемы, и когда я запускал Java-программы (в терминале), я просто говорил:
java className
и программа запустится. Но в последнее время, когда я пытаюсь это сделать, я получаю ошибку,
не удалось найти или загрузить основной класс className
Чтобы это исправить я добавляю -cp ./
мой рабочий каталог curring к classpath, и затем программа запускается. Я не уверен, что добавить к моим переменным среды, чтобы текущий рабочий каталог всегда был в пути к классу, избегая этого более длинного сценария,
java -cp ./ className
В соответствии с этой статьей Stackru стандартная реализация Oracle ищет имя текущего класса в текущем рабочем каталоге.
(Я использую Java 8 и Windows 8.1)
1 ответ
Путь к классу, если он не найден в командной строке и не найден в CLASSPATH
переменная окружения, по умолчанию используется текущий каталог.
-cp classpath
Определяет список каталогов, JAR-файлов и ZIP-архивов для поиска файлов классов. Разделите записи пути к классу точкой с запятой (;)
Указание -classpath или -cp переопределяет любой параметр переменной среды CLASSPATH.
Если -classpath и -cp не используются, а CLASSPATH не задан, то путь к классу пользователя состоит из текущего каталога (.).
Если вы укажете -cp
, то вы должны явно включить .
(текущий каталог) в classpath, или он не будет включен.
Если не используется -cp
не работает, но явно заявляет -cp .
работает, то вы должны иметь CLASSPATH
переменная среды определена, и она не должна явно включать .
, Это объясняет, почему переопределение CLASSPATH
в том числе .
с -cp
вариант работает.