Что такое classpath?

Я просто читал эту строку:

Первое, что делает метод format(), - это загрузить шаблон Velocity из pathpath с именем output.vm

И я не мог понять, что означало classpath в этом контексте.

Ответ 1

При программировании на Java вы делаете другие классы доступными для класса, который вы пишете, помещая что-то вроде этого в начало исходного файла:

import org.javaguy.coolframework.MyClass;

Или иногда вы "массовый импорт", говоря:

import org.javaguy.coolframework.*;

Так что позже в вашей программе, когда вы говорите:

MyClass mine = new MyClass();

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

Было бы непрактично, если бы VM просматривала каждую папку на вашем компьютере, поэтому вам нужно предоставить VM список мест для просмотра. Это делается путем размещения файлов папок и jar в вашем пути к классам.

Прежде чем говорить о том, как настроен класс, давайте поговорим о файлах.class, пакетах и файлах.jar.

Во-первых, предположим, что MyClass - это то, что вы создали как часть вашего проекта, и оно находится в директории в вашем проекте с именем output. Файл.class будет на output/org/javaguy/coolframework/MyClass.class (вместе с любым другим файлом в этом пакете). Чтобы добраться до этого файла, ваш путь просто должен был содержать папку "output", а не всю структуру пакета, поскольку ваш оператор импорта предоставляет всю эту информацию виртуальной машине.

Предположим, что вы включили CoolFramework в файл.jar и поместите этот CoolFramework.jar в каталог lib в своем проекте. Теперь вам нужно будет поместить lib/CoolFramework.jar в ваш lib/CoolFramework.jar к классам. VM org/javaguy/coolframework в файл jar для части org/javaguy/coolframework и найдет ваш класс.

Таким образом, classpaths содержат:

  • JAR файлы и
  • Пути к вершине иерархии пакетов.

Как вы устанавливаете свой путь к классу?

Первый способ, которым все, похоже, учится, - это переменные среды. На машине unix вы можете сказать что-то вроде:

export CLASSPATH=/home/myaccount/myproject/lib/CoolFramework.jar:/home/myaccount/myproject/output/

На компьютере с Windows вы должны перейти к настройкам среды и добавить или изменить значение, которое уже существует.

Второй способ - использовать параметр -cp при запуске Java, например:

java -cp "/home/myaccount/myproject/lib/CoolFramework.jar:/home/myaccount/myproject/output/"  MyMainClass

Вариантом этого является третий способ, который часто выполняется с .sh или .bat файлом, который вычисляет путь к классам и передает его на Java через параметр -cp.

Так что лучший способ сделать это?

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

-cp - путь. Обычно я убеждаюсь, что моя переменная среды CLASSPATH является пустой строкой, где я, по возможности, разрабатываю, чтобы избежать глобальных проблем в классе (некоторые инструменты недовольны, когда глобальный путь класса пуст, хотя - я знаю две общие, мега тысячи доллары, лицензированные J2EE и Java-серверы, которые имеют такую проблему со своими инструментами командной строки).

Ответ 2

Подумайте об этом как ответ Java на переменную среды PATH - поиск ОС для EXE на PATH, Java ищет классы и пакеты в пути к классам.

Как и вопрос о Springsteen-esque.

Ответ 3

Путь к классам - это путь, в котором виртуальная машина Java ищет пользовательские классы, пакеты и ресурсы в программах Java.

В этом контексте метод format() загружает файл шаблона с этого пути.

Ответ 4

Путь к классам в этом контексте является именно тем, что он в общем контексте: где-либо в VM знает, что он может найти классы для загрузки, а также ресурсы (например, output.vm в вашем случае).

Я бы понял, что Velocity ожидает найти файл с именем output.vm в любом месте "без пакета". Это может быть JAR, обычная папка,... Корень любого из местоположений в пути класса приложения.

Ответ 5

Настройка системной переменной CLASSPATH

Чтобы отобразить текущую переменную CLASSPATH, используйте эти команды в Windows и UNIX (оболочка Bourne): В Windows: C:\> set CLASSPATH В UNIX: % echo $CLASSPATH

Чтобы удалить текущее содержимое переменной CLASSPATH, используйте следующие команды: В Windows: C:\> set CLASSPATH= В UNIX: % unset CLASSPATH; export CLASSPATH

Чтобы установить переменную CLASSPATH, используйте эти команды (например): В Windows: C:\> set CLASSPATH=C:\users\george\java\classes В UNIX: % CLASSPATH=/home/george/java/classes; export CLASSPATH

Ответ 6

Classpath - это переменная среды для системы. Параметр этой переменной используется для предоставления корня любой иерархии пакетов java-компилятору.

Ответ 7

CLASSPATH - это переменная среды (т.е. глобальные переменные операционной системы, доступные для всех процессов), необходимые для компилятора Java и среды выполнения для поиска пакетов Java, используемых в программе Java. (Почему бы не вызвать PACKAGEPATH?) Это похоже на другую переменную среды PATH, которая используется оболочкой CMD для поиска исполняемых программ.

CLASSPATH может быть установлен одним из следующих способов:

CLASSPATH can be set permanently in the environment: In Windows, choose control panel ⇒ System ⇒ Advanced ⇒ Environment Variables ⇒ choose "System Variables" (for all the users) or "User Variables" (only the currently login user) ⇒ choose "Edit" (if CLASSPATH already exists) or "New" ⇒ Enter "CLASSPATH" as the variable name ⇒ Enter the required directories and JAR files (separated by semicolons) as the value (e.g., ".;c:\javaproject\classes;d:\tomcat\lib\servlet-api.jar"). Take note that you need to include the current working directory (denoted by '.') in the CLASSPATH.

To check the current setting of the CLASSPATH, issue the following command:

> SET CLASSPATH

CLASSPATH can be set temporarily for that particular CMD shell session by issuing the following command:

> SET CLASSPATH=.;c:\javaproject\classes;d:\tomcat\lib\servlet-api.jar

Instead of using the CLASSPATH environment variable, you can also use the command-line option -classpath or -cp of the javac and java commands, for example,

> java –classpath c:\javaproject\classes com.abc.project1.subproject2.MyClass3

Ответ 8

Статический член класса можно вызывать непосредственно без создания экземпляра объекта. Поскольку основным методом является статическая виртуальная машина Java, она может вызывать ее без создания какого-либо экземпляра класса, который содержит основной метод, который является начальной точкой программы.

Ответ 9

Environment variable - это глобальная системная переменная, доступная всем процессам, работающим в операционной системе (ОС).

classpath в Java - это environment variable используемая виртуальной машиной Java для поиска или поиска файлов классов (.class) в Java во время загрузки классов ClassLoader.

Компилятор Java (javac), среда выполнения Java (java) и другие инструменты Java ищут классы, используемые в вашей программе, в следующем порядке:

  1. Классы платформы Java (начальной загрузки)
  2. Каталоги расширений Java
  3. Путь поиска классов пользователя (короче, путь к classpath): определяется в следующем порядке:

    а. По умолчанию используется current working directory (.).

    б. Записи в environment variable classpath, которая переопределяет значение по умолчанию.

    с. Записи в параметре -cp (или -classpath), который переопределяет переменную окружения classpath.

    д. Опция командной строки времени выполнения -jar, которая отменяет все вышеперечисленное.

Переменная окружения classpath может включать каталоги (содержащие много файлов классов) и файлы JAR (однофайловый архив файлов классов). Если classpath не установлен, по умолчанию используется current directory. Если вы установили classpath, важно включить current working directory (.). В противном случае текущий каталог не будет найден.

Вы можете переопределить путь к classpath в Java, определенный environment variable -cp параметр -cp или -classpath во время работы программы Java, и это лучший способ иметь разные classpath к classpath для разных приложений Java, работающих на одном компьютере с Unix или Windows.

java -cp "<path/1><separator><path/2>" <path.to.your.MainClass>

разделители - точка с запятой ; - Windows, двоеточие : - Linux

Например, команда для MacOS

java -cp "Test.jar:lib/*" my.package.MainClass

Узнайте больше здесь и здесь

Ответ 10

classpath и path являются переменными среды. Как правило, вы должны поместить jdk/bin в путь, чтобы u мог использовать java-компилятор везде, classpath - это путь к вашим .class файлам. путь к классам имеет путь по умолчанию к периоду (.), что означает текущий каталог. но когда вы использовали пакеты. u либо задал бы полный путь к файлу .class, либо поместил путь .class в путь к классам, который бы сэкономил массу работ!