Простой вопрос о Java и переменные окружения в Ubuntu - PullRequest
0 голосов
/ 24 июня 2011

У меня Ubuntu 10.10 с уже установленным Java.Я могу выполнить команду Java из любой папки.Я предположил, что это может быть потому, что я установил Java ClasspathНо ни JAVA_HOME, ни CLASSPATH не установлены.

Если я просматриваю содержимое / etc / environment, я вижу, что PATH установлен в / usr / bin / (среди прочих).Поскольку 'which java' возвращает / usr / bin / java, это причина, по которой я могу выполнять java из любого места?Если нет, то почему?

Ответы [ 2 ]

3 голосов
/ 24 июня 2011

Вы можете выполнить Java, потому что команда находится на вашем пути.

echo $PATH

покажет вам, какие каталоги ищутся, в каком порядке найти конкретную программу.Поскольку /usr/bin находится на вашем пути, когда вы наберете java, в конечном итоге вы увидите /usr/bin/java.Обратите внимание, что во многих системах это символическая ссылка (файл, который указывает на другой файл), поэтому /usr/bin/java часто указывает на /etc/alternatives/java (который также является символической ссылкой, указывающей на реальный исполняемый файл).

То, где переменная окружения JAVA_HOME вступает в игру, находится в инструментах и ​​программах, которые проверяют наличие JAVA_HOME и действуют на него, а не полагаясь на путь.В большинстве современных систем Linux работа, выполняемая подсистемой альтернатив, заменяет более раннюю (более проблемную) методику JAVA_HOME.Тем не менее, вы, возможно, захотите установить JAVA_HOME в любом случае, если вы столкнетесь с инструментом, который требует его.

Одна из причин, по которой JAVA_HOME не так популярна, как могла бы быть, заключается в том, чтобы получить доступ к JAVA_HOME вамнеобходимо запустить оболочку, и не каждый хочет обернуть каждый элемент Java в команду оболочки.

1 голос
/ 24 июня 2011

Да, если двоичный файл Java (или ссылка на него) находится в папке, которая указана в пути, тогда вы можете выполнить Java без указания пути к нему (например, /usr/local/java/latest/bin/java -jar x.jar). JAVA_HOME и CLASSPATH не имеют ничего общегос системным путем.JAVA_HOME позволяет другим программам (или сценариям) знать, где искать установку Java.CLASSPATH сообщает Java, где искать классы (файлы .class, являющиеся результатом компиляции файлов .java).

...