Что такое путь к классу и как я устанавливаю его?

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

Первая вещь формат () метод делает загрузить шаблон Velocity из пути к классу, названного output.vm

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

302
задан Stephen C 1 June 2019 в 21:44
поделиться

4 ответа

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

import org.javaguy.coolframework.MyClass;

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

import org.javaguy.coolframework.*;

Итак позже в вашей программе, когда вы скажете:

MyClass mine = new MyClass();

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

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

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

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

Теперь предположим, что вы упаковываете CoolFramework в файл .jar и помещаете этот CoolFramework.jar в каталог lib вашего проекта. Теперь вам нужно поместить lib / CoolFramework.jar в путь к классам. ВМ заглянет внутрь jar-файла для части org / javaguy / coolframework и найдет ваш класс.

Итак, пути к классам содержат:

  • 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 .

Со всем вышеперечисленным есть некоторая "ошибка". В большинстве систем (Linux, Mac OS, UNIX и т. Д.) Двоеточие (':') является разделителем пути к классам. В windowsm разделителем является точка с запятой (';')

Итак, как лучше всего это сделать?

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

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

490
ответ дан 23 November 2019 в 01:25
поделиться

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

60
ответ дан 23 November 2019 в 01:25
поделиться

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

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

5
ответ дан 23 November 2019 в 01:25
поделиться

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

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

11
ответ дан 23 November 2019 в 01:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: