Опция Java -classpath - PullRequest
       19

Опция Java -classpath

18 голосов
/ 29 января 2010

Будет ли использование опции -classpath с java добавлять или заменять содержимое переменной CLASSPATH env?

Ответы [ 4 ]

15 голосов
/ 29 января 2010

Используя переменную classpath, она переопределяет CLASSPATH переменной Environment, но только для этого сеанса. Если вы перезапустите приложение, вам нужно снова установить переменную classpath.

7 голосов
/ 29 января 2010

Используется один из вариантов, а не оба.

Указание -classpath или -cp переопределяет любой параметр переменной среды CLASSPATH.

...

Параметр -classpath предпочтителен, поскольку вы можете установить его индивидуально для каждого приложения, не затрагивая другие приложения и не изменяя его значение другими приложениями.

...

Установка переменной CLASSPATH или использование параметра командной строки -classpath переопределяет это значение по умолчанию, поэтому, если вы хотите включить текущий каталог в путь поиска, вы должны включить «.» в новых настройках.

7 голосов
/ 29 января 2010

Да. Цитируется из справочной страницы java(1):

   -classpath classpath
   -cp classpath
          Specifies a list of directories, JAR archives, and ZIP archives to search  for  class  files.   Class
          path  entries  are separated by colons (:). Specifying -classpath or -cp overrides any setting of the
          CLASSPATH environment variable.

          If -classpath and -cp are not used and CLASSPATH is not set, the user class path consists of the cur-
          rent directory (.).
6 голосов
/ 29 января 2010

Использование параметра -cp не повлияет на переменную среды CLASSPATH.

Вы можете попробовать этот небольшой фрагмент кода, чтобы проверить это:

public class CPTest {
    public static void main (final String[] args) {
        String cp = System.getenv("CLASSPATH");
        System.out.println(cp);
    }
}
%echo $CLASSPATH  
/home/test/:.

Вывод без опции -cp:

%java CPTest  
/home/test/:.

Вывод с параметром -cp:

%java -cp /home/xanadu:. CPTest  
/home/test/:.

Вывод одинаков для обоих вызовов (один с -cp, а другой без).

Также либо путь, указанный в переменной среды CLASSPATH , равен
используется или используется путь, указанный в параметре -cp . Это не смесь обоих это один из них.

Это видно из приведенного ниже вызова. Если CWD (текущий рабочий каталог "." )
исключено из опции -cp, средство запуска JVM (т.е. java) не может найти
Файл класса, несмотря на переменную среды CLASSPATH, содержащую CWD ( "." ).

%java -cp /home/test CPTest
Exception in thread "main" java.lang.NoClassDefFoundError: CPTest
...