2015-09-11 3 views
3

Я отдаю себе отчет в том, что следующие действия иногда влияют на ваш класс, но я хотел бы узнать более точно, когда и как это повлияет на следующее:Исчерпаем, как Java определяет ваш путь к классу?

  • Class-Path в манифесте
  • CLASSPATH в Вашей среде
  • -cp/-classpath в командной строке
  • -jar в командной строке

Пример:

Я знаю, что если -jar указано, что указанная банку будет указана в пути к классу и что -cp/-classpath и CLASSPATH будут проигнорированы.

Я считаю, что если -cp/-classpath указан, CLASSPATH будет проигнорирован.

Class-Path - это почти полная тайна для меня прямо сейчас. Я знаю, что если вы укажете банку с -jar, она будет использовать Class-Path из манифеста в банке. Будет ли он также использовать Class-Path банки для классов внутри этой банки, даже если он не был указан -jar? Будет ли он использоваться для всех классов, а не только для классов внутри банки? Соединяют ли они друг друга или заменяют друг друга? Какое предвидение делает Class-Path взять в свои classpath? Будет ли это проверено последним, первое проверено или где-то посередине?

Кроме того, для всех различных способов вы можете указать, что должно быть на вашем пути к классам, что такое правильный синтаксис? Правильны ли/необходимы команды? Могу ли я иметь несколько Class-Path сек, указанных в манифесте (IE, я могу поставить один на линию, чтобы сделать его более удобным для чтения?)

ответ

2

Из следующего сайта http://www.ntu.edu.sg/home/ehchua/programming/howto/Environment_Variables.html под , как классы найден поиск

классов пользователей путь (короче, путь класса): определяется в следующем порядке:

  1. По умолчанию используется текущий рабочий каталог (.).
  2. Записи в переменной окружения CLASSPATH, которая переопределяет значение по умолчанию.
  3. Записи в опции командной строки -cp (или -classpath), которая переопределяет переменную окружения CLASSPATH.
  4. Вариант командной строки времени исполнения -jar, который отменяет все вышеперечисленное.

Пути классов пользователя хранятся в свойстве Java System java.class.path.

+0

Хорошее начало. Как записи 'Class-Path' в манифольдах jar вписываются во все это? – ArtOfWarfare

+0

Записи класса-пути в файлах JAR (если они ссылаются либо на переменную env 'CLASSPATH', либо на параметр' -classpath' или '-jar'), то _added_ соответствуют пути поиска класса. Это позволяет интересное транзитивное поведение, когда вы начинаете только с одного JAR-файла, который ссылается на несколько JAR-серверов, которые, в свою очередь, ссылаются еще больше. – Seelenvirtuose

+0

@Seelenvirtuose - Скажем, у меня есть 'a.jar' и' b.jar' на моем 'CLASSPATH'. 'a.jar' имеет манифест с упоминанием' class-Path' 'c.jar'. Являются ли классы внутри 'c.jar' видимыми для классов внутри' b.jar'? Это зависит от того, что вещи были на моем «CLASSPATH» в начале? – ArtOfWarfare