Відповіді:
Під час програмування на 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', а не всю структуру пакету, оскільки ваш вивіз про імпорт надає всю цю інформацію до VM.
Тепер давайте припустимо, що ви зв’язуєте CoolFramework у файл .jar і помістите цей CoolFramework.jar у каталог lib у вашому проекті. Тепер вам потрібно було б поставити lib/CoolFramework.jar
на свій класний шлях. ВМ загляне всередину файлу jar для org/javaguy/coolframework
частини та знайде свій клас.
Отже, класи класи містять:
Як встановити свій класний шлях?
Перший спосіб, як здається, всі навчаються - це змінні середовища. На машині 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, які мають такі проблеми з інструментами командного рядка).
org.javaguy.coolfw
відповідну структуру каталогів /path/to/org/javaguy/coolfw/
, класpath повинен містити /path/to/
. Якщо я додати новий пакет org.javaguy.hotfw
у той же проект, результат класу (як правило) закінчується о /path/to/org/javaguy/hotfw/
. Для цього потрібно містити класний шлях /path/to/
, який він вже робить. Отже, новий пакет (і класи, що містяться в ньому) не потребують нових доповнень до classpath.
Класовий шлях у цьому контексті - саме такий, який він є в загальному контексті: де завгодно VM знає, що він може знайти класи для завантаження, а також ресурси (наприклад, output.vm у вашому випадку).
Я б зрозумів, що Velocity очікує знайти файл з назвою output.vm в будь-якому місці "без пакета". Це може бути JAR, звичайна папка, ... Корінь будь-якого з розташувань у класі програми програми.
Налаштування змінної системи 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
Classpath - це змінна середовище системи. Налаштування цієї змінної використовується для надання кореня будь-якої ієрархії пакетів компілятору Java.
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
Статичний член класу можна викликати безпосередньо, не створюючи примірник об'єкта. Оскільки основним методом є статична Java, віртуальна машина може викликати його, не створюючи жодного примірника класу, який містить основний метод, який є початковою точкою програми.
Для користувачів Linux та підводячи підсумки та додавання до того, що тут сказали інші, слід знати наступне:
$ CLASSPATH - це те, що Java використовує для перегляду декількох каталогів, щоб знайти всі різні класи, необхідні для вашого сценарію (якщо ви прямо не скажете про це іншим чином при перевірці -cp). Використання -cp вимагає, щоб ви відстежували всі каталоги вручну та копіювали та вставляли цей рядок щоразу, коли запускаєте програму (не бажано IMO).
Символ двокрапки (":") розділяє різні каталоги. Є лише один $ CLASSPATH, і в ньому є всі каталоги. Отже, коли ви запускаєте "експортувати CLASSPATH = ....", ви хочете включити поточне значення "$ CLASSPATH", щоб додати його. Наприклад:
export CLASSPATH=.
export CLASSPATH=$CLASSPATH:/usr/share/java/mysql-connector-java-5.1.12.jar
У першому рядку вище, ви запускаєте CLASSPATH з простої «крапки», яка є шлях до вашої поточної робочої директорії. З цим, щоразу, коли ви запускаєте java, він буде переглядатись у поточному робочому каталозі (тому, у якому ви знаходитесь) для класів. У другому рядку вище $ CLASSPATH захоплює значення, яке ви раніше ввели (.), І додає шлях до dirver mysql. Тепер java шукатиме водія ТА для ваших занять.
echo $CLASSPATH
це дуже зручно, і те, що він повертає, повинно читати, як розділений двокрапкою список всіх каталогів, і .jar файлів, ви хочете, щоб java шукала потрібні йому класи.
Tomcat не використовує CLASSPATH. Прочитайте, що з цим робити тут: https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html