понедельник, 30 ноября 2009 г.

Linux Debian (Ubuntu) - прописываем CLASSPATH для java

Как известно, CLASSPATH - это такая переменная, в которой содержатся пути, по которым компилятор и интерпретатор JAVA пытаются найти файлы и *.class для их обработки. Рассмотрим все это на примере.
Будем хранить все наши java проекты в директории /home/username/workspace. В моем случае username заменяется на alexwinner и эта директория выглядит так: /home/alexwinner/workspace. Конечно, можно было бы перемещаться в эту директорию командой cd, создавать там файлик с кодом java, например, /home/alexwinner/workspace/blabla.java, далее выполнять
javac blabla.java
затем
java blabla
и получать результат. Но что делать в случае, когда наш класс принадлежит какому-либо пакету? Например, у нас есть 2 класса в двух файлах. Первый файл - test.java:
package for_testing;
public class test{
     public static void main(String s[]){
        aga A = new aga();
        System.out.println(A.aga);
        };
};
Второй файл - aga.java, в нем будет храниться class aga:
package for_testing;
class aga{
     String aga="aga";
}
Что же мы делаем? Мы создаем папку /home/username/workspace/for_testing, причем имя этой папки должно совпадать с именем пакета, которое задается в строчке  "package for_testing;". Далее добавляем путь к папке workspace в переменную CLASSPATH:
export CLASSPATH=$CLASSPATH:/home/username/workspace/
После этого перемещаемся в папку /home/username/workspace/for_testing и компилируем наш пакет:
javac test.java
После этого остается только запустить его. Запускать можно абсолютно из любой папки, так как путь к ней содержится в глобальной переменной CLASSPATH:
java for_testing.test
и получаем результат:
aga
Стоит заметить, что путь к этой директории будет содержаться в CLASSPATH только до конца текущего сеанса. Чтобы добавить его туда перманентно, надо выполнить следующее:
echo "export CLASSPATH=$CLASSPATH:/home/username/workspace/" >>/home/username/.bashrc

2 комментария:

Oxygen комментирует...

Да, если долго программировать в Eclipse или netbeans, часто забываешь, какая это прелесть - classpath!

ann_loboda комментирует...

спасибо большое. а можете объяснить разницу такой установки classpath и javac -classpath ??