Есть несколько способов получить javac для создания файла класса /home/bob/class/a.class.
Есть два компонента, которые взаимодействуют, чтобы определить, где будет сгенерирован вывод javac:
Значение «каталога назначения», которое задается параметром -d.
Пакет, к которому принадлежит класс, определенный в a.java. Это устанавливается оператором пакета в вашем исходном файле Java.
Вот таблица возможных значений, которая даст вам результаты, которые вы ищете, с некоторыми примечаниями о них
destination directory (-d) | package declaration | comments
/home/bob/classes | not set | you probably have this
/home/bob | classes | not recommended. See note 1.
/home | bob.classes | not recommended.
/ | home.bob.classes | not recommended.
Примечание 1: Хотя в объявлении пакета можно указать почти ЛЮБОЕ значение, это не рекомендуется. Рекомендуемая практика состоит в том, чтобы структура пакета ваших классов была подстроена под расположение ваших исходных файлов относительно некоторого каталога 'package root'
Вот несколько примеров:
package declaration | package root | recommended path of source file
z | /home/b/project1 | /home/b/project1/z/MyClass.java
y.z | /home/b/project1 | /home/b/project1/y/z/MyClass.java
Каждая переменная среды, на которую вы ссылаетесь, имеет определенное «задание», которое, вероятно, будет полезно при выполнении некоторых заданий, когда вы узнаете больше о разработке Java.
CLASSPATH: список папок / jar-файлов, которые, как предполагается, являются корнями пакета для поиска файлов классов, от которых зависит ваш код. Это используется javac для перевода вашего файла dot-java в файл класса точек И это используется java для запуска вашего класса / программы java. Эта переменная игнорируется, если вы используете опцию -classpath в javac / java.
JAVAPATH: список папок / jar-файлов, которые, как предполагается, являются корнями пакета для поиска исходных файлов java, от которых зависит ваш код. Это используется командой javac. Эта переменная игнорируется, если вы используете опцию -sourcepath в javac.
JAVA_HOME: это корневой каталог вашей установки java. В вашем вопросе /home/bob/java/jdk1.5.0_06 - это JAVA_HOME. Эта переменная обычно используется программами, которые реализованы на языке Java. Такие инструменты, как javac и java, не используют JAVA_HOME, так как они могут вычислить его при выполнении. Чаще всего люди используют JAVA_HOME в сценарии оболочки своего проекта для запуска своей программы.
Я бы не рекомендовал использовать переменную окружения, на которую вы ссылаетесь. Я занимаюсь программированием на Java около 10 лет и редко их устанавливаю. Я склонен использовать параметры командной строки. Зачем? Потому что слишком легко забыть, каковы ваши переменные настройки, и оказаться в ситуациях, когда то, что вы думаете, происходит, не так.