Компиляция java кода без использования ide (одного класса, нескольких, создание jar-файла).
Пусть, исходный код программы находится в файле Test.java по пути:
project-dir/ Test.java
Имя файла с исходным кодом должно совпадать с именем класса (class Test -> Test.java).
// Test.java public class Test { public static void main(String[] args) { System.out.println("Run Test"); } }
Компилируем файл Test.java в файл с байт-кодом Test.class командой:
Файл Test.class появится рядом с Test.java:
project-dir/ Test.java Test.class
Запускаем программу командой:
Для работы с несколькими классами нужен classpath. Он похож на файловую систему, в которой содержатся классы, а функции папок выполняют пакеты (packages).
Отделим файлы исходного кода (каталог src/) от скомпилированных файлов (bin/). Например, в пакете src находится два класса Box и BoxMachine.
// Box.java package src; public class Box { private double size; public Box(double size) { this.size = size; } public String toString() { return "Box have size " + size; } }
// BoxMachine.java package src; public class BoxMachine { public static void main(String[] args) { for (int i = 0; i < 5; i++) { System.out.println(new Box(Math.random() * 10)); } } }
Все это образует файловую структуру:
project-dir/ src/ Box.java BoxMachine.java
Чтобы скомпилировать эту группу классов, необходимо из главного каталога (в котором лежит src/ каталог) выполнить команду:
$ javac -d bin ./src/* где: -d - флаг, после которого следует указать... bin - ...куда попадут скомпилированные файлы ./src/ - расположение исходных файлов * - указывает, что необходимо скомпилировать все файлы
Теперь скомпилированные файлы появились в папке bin/:
project-dir/ src/ Box.java BoxMachine.java bin/ src/ Box.class BoxMachine.class
Для их запуска из главной директории (project-dir)воспользуемся командой:
$ java -classpath ./bin src.BoxMachine где: -classpath - флаг, после которого указывается... ./bin - ...местоположение скомпилированных файлов src.BoxMachine - название пакета и главного класса
Соберем скомпилированные файлы в jar-файл - архив классов.
В главном каталоге создадим файл-манифест manifest.mf:
project-dir/ manifest.mf src/ Box.java BoxMachine.java bin/ src/ Box.class BoxMachine.class
В нем указывается главный класс, который будет запускаться при выполнении jar-файла, classpath и дополнительная информация.
main-class: src.BoxMachine // класс, содержащий метод main class-path: bin/ // путь к скомпилированным классам
Собираем jar-файл:
jar -cmf manifest.mf box-machine.jar -C bin . где: -cmf - флаг, после которого указывают... manifest.mf - ...путь к манифесту box-machine.jar - название выходного jar-файла -C - флаг, после которого указывают... bin - ...путь к скомпилированным классам . - путь, куда будет помещен jar-файл
jar-файл создан в текущей папке
project-dir/ box-machine.jar manifest.mf src/ Box.java BoxMachine.java bin/ src/ Box.class BoxMachine.class
Запускаем jar-файл командой:
В качестве проверки создадим отдельную директорию lib/, перенесем туда наш jar-файл и запустим его оттуда.
project-dir/ manifest.mf src/ Box.java BoxMachine.java bin/ src/ Box.class BoxMachine.class lib/ box-machine.jar