Классы в Java бывают 3 видов:
Для каждого из этих типов классов, в виртульной машине есть свой класс-лоудер. В приложении доступн класс-лоудер класспаза, для него отцовским считается лоудер ектеншинов, а для екстеншина - бутстрапный.
Когда класслоудеру нужно найти класс он обращается сначала к своему родителю и только если последний не нашел, ищет у себя. Поэтому классы ищутся слева направо по таблице.
При выполнении приложения для него класспаз лучше указывать через ключ, чем через системную переменную.
Правила такие:
1) Если нужно поместить конктретный джарник в класспаз:
2) Можно поместить все джарники из каталога:
3) Нужен кокретный порядок джарников для поиска по ним:
4) Нам нужны скомпиленные классы. Подгружаются и из дефолтного пакета и те, которые находятся в подкаталогах(в пакетах).
5) А вот такой прикол дает нам возможность загрузить все джарники с указанного каталога, также класс-файлы которые лежат по соседству, и класс-файлы в подкаталогах, которые отображают реальную пакетную иерархию.
6) Указав при выполнении, что мы собираемсчя запустить приложение из архива jar, через ключ -jar, нужно помнить что ключ -classpath паралельно использовать нельзя -- все необходимые для выполнения библиотеки должны быть либо в архиве, либо на них должны быть правильные ссылки в манифесте архива.
Не получится запускать класс-файлы, если мы класспазимся к нем не из их корня, а из середины.
Если мы класспазимся на несколько разных директорий, но в которых одинаковая структура поддиректорий с классами, то в вирутальной машине это все один пакет и все классы доступны.
| <jre>/lib (rt.jar ...) | %winhome%\Sun\Java\lib\ext <jre>/lib/ext | -classpath |
| Part of java platform (bootstrap classes) | Java extentions (general ones for all JREs in env, or env-specific ones) | Third party & User defined |
Для каждого из этих типов классов, в виртульной машине есть свой класс-лоудер. В приложении доступн класс-лоудер класспаза, для него отцовским считается лоудер ектеншинов, а для екстеншина - бутстрапный.
Когда класслоудеру нужно найти класс он обращается сначала к своему родителю и только если последний не нашел, ищет у себя. Поэтому классы ищутся слева направо по таблице.
При выполнении приложения для него класспаз лучше указывать через ключ, чем через системную переменную.
Правила такие:
1) Если нужно поместить конктретный джарник в класспаз:
java -classpath path/to/jar.jar mypack.mysub.MyClass
2) Можно поместить все джарники из каталога:
java -classpath path/to/* mypack.mysub.MyClass
3) Нужен кокретный порядок джарников для поиска по ним:
java -classpath path/to/jarZ.jar;path/to/jarY.jar;path/to/jar11.jar mypack.mysub.MyClass
4) Нам нужны скомпиленные классы. Подгружаются и из дефолтного пакета и те, которые находятся в подкаталогах(в пакетах).
java -classpath otherpath/to/compiled mypack.mysub.MyClass
5) А вот такой прикол дает нам возможность загрузить все джарники с указанного каталога, также класс-файлы которые лежат по соседству, и класс-файлы в подкаталогах, которые отображают реальную пакетную иерархию.
java -classpath somepath/with/compiled-and-jarsinupperlevel;somepath/with/compiled-and-jarsinupperlevel/* mypack.mysub.MyClass
6) Указав при выполнении, что мы собираемсчя запустить приложение из архива jar, через ключ -jar, нужно помнить что ключ -classpath паралельно использовать нельзя -- все необходимые для выполнения библиотеки должны быть либо в архиве, либо на них должны быть правильные ссылки в манифесте архива.
Не получится запускать класс-файлы, если мы класспазимся к нем не из их корня, а из середины.
Если мы класспазимся на несколько разных директорий, но в которых одинаковая структура поддиректорий с классами, то в вирутальной машине это все один пакет и все классы доступны.
Комментариев нет:
Отправить комментарий