Используя Java 6 или новее, опция classpath поддерживает подстановочные знаки. Обратите внимание на следующее:
Записи пути к классу могут содержать подстановочный знак базового имени *
, что считается эквивалентным указанию списка всех файлов
в каталоге с расширением .jar
или .JAR
. Например,
Запись пути к классам foo/*
определяет все файлы JAR в каталоге с именем
Foo. Запись пути к классу, состоящая просто из *
, расширяется до списка всех
файлы JAR в текущем каталоге.
Запись пути к классу, содержащая *
, не будет соответствовать файлам класса. к
сопоставьте оба класса и JAR-файлы в одном каталоге foo, используйте либо
foo;foo/*
или foo/*;foo
. Выбранный порядок определяет, будет ли
классы и ресурсы в foo
загружаются перед файлами JAR в foo
, или
наоборот.
Подкаталоги не ищутся рекурсивно. Например, foo/*
выглядит
для файлов JAR только в foo
, а не в foo/bar
, foo/baz
и т. д.
Порядок, в котором JAR-файлы в каталоге перечисляются в
расширенный путь к классу не указан и может варьироваться от платформы к
Платформа и даже время от времени на одной машине.
правильно построенное приложение не должно зависеть от какого-либо конкретного
порядок. Если требуется определенный порядок, файлы JAR могут быть
перечислил явно в пути к классам.
Расширение подстановочных знаков выполняется рано, до вызова
Основной метод программы, а не поздно, во время загрузки класса
сам процесс. Каждый элемент входного пути класса, содержащий
подстановочный знак заменяется (возможно, пустой) последовательностью элементов
генерируется путем перечисления файлов JAR в именованном каталоге. За
Например, если каталог foo
содержит a.jar
, b.jar
и c.jar
, то
путь к классу foo/*
расширен до foo/a.jar;foo/b.jar;foo/c.jar
,
и эта строка будет значением системного свойства
java.class.path
.
Переменная окружения CLASSPATH
не обрабатывается иначе, чем
параметр командной строки -classpath
(или -cp
). То есть символы подстановки
во всех этих случаях Тем не менее, подстановочные знаки пути класса не являются
в заголовке Class-Path jar-manifest
.
Примечание: из-за известной ошибки в java 8 примеры Windows должны использовать обратную косую черту, предшествующую записи с завершающей звездочкой: https://bugs.openjdk.java.net/browse/JDK-8131329