Java / javac будет искать классы в classpath .
Класс по умолчанию classpath охватывает папки /path/to/jre/lib
и /path/to/jre/lib/ext
. Любые найденные там классы и JAR-файлы будут взяты в пути к классам. Вы можете в теории поместить свои классы и файлы JAR туда, чтобы вам не нужно было ничего делать, чтобы получить java / javac для их поиска. Но на самом деле это крайне плохая практика . Это рецепт для проблем с мобильностью, потому что это не одинаково на всех машинах. Оставьте эти папки нетронутыми.
Затем есть переменная окружения %CLASSPATH%
, в которой вы можете указать полные пути к корневым папкам, в которых расположены классы, и / или полные пути к файлам JAR (включая само имя файла JAR!). В Windows несколько путей разделяются точкой с запятой ;
, а в * Nix - двоеточием :
. Пути с пробелами внутри должны быть заключены в кавычки ""
. Вот пример:
SET CLASSPATH = .;/path/to/File.jar;"/spacy path to some pkg/with/classes"
Обратите внимание на точку .
в начале аргумента. Это указывает текущий путь (текущий рабочий каталог, из которого должна выполняться команда java / javac). Таким образом, он найдет только классы в текущем пути, и, следовательно, не JAR-файлы! Вам необходимо указать полный путь к ним. Начиная с Java 1.6, вы также можете использовать подстановочные знаки для указания нескольких файлов JAR по некоторому пути. Э.Г.
SET CLASSPATH = .;/path/to/all/jars/*;"/spacy path to some pkg/with/classes"
Эта переменная среды на самом деле является удобным способом управления путем к классам, так что вам не нужно вводить одно и то же снова и снова в командной консоли каждый раз. Но это полезно только для новичков в java-пользователях и является причиной всей путаницы в будущем, потому что они подумают, что это "*" 1031 * classpath. Это предположение на самом деле неверно и снова является причиной проблем с переносимостью, потому что это не одинаково на всех машинах.
Правильный способ определения пути к классу - использовать аргумент -cp
или -classpath
, в котором вы фактически указываете ту же информацию, которую вы хотели бы ввести для %CLASSPATH%
, то есть (разделенные двоеточием) и пути с - пробелы в кавычках, например:
javac -cp .;/path/to/File.jar;"/spacy path to some pkg/with/classes" Foo.java
Обратите внимание, что если вы используете аргументы -cp
или -classpath
(или -jar
), то java / javac игнорирует переменную окружения %CLASSPATH%
(которая на самом деле является хорошей вещью * +1048 * ТМ * * тысяча сорок девять).
Чтобы сэкономить время при повторном вводе одного и того же снова и снова, просто создайте файл bat
или cmd
(или, если вы используете * Nix, файл sh
). По сути, просто вставьте туда те же команды, которые вы вводите в консоли «plain», а затем выполняйте их обычным для платформы способом.
Чтобы сэкономить больше времени, используйте IDE. Путь к классу, который должен использоваться как во время компиляции, так и во время выполнения внутри IDE, называется «путем сборки». Изучите свойства проекта, и вы увидите.