Перейти к основному содержимому

Скомпилируйте несколько исходных файлов Java с помощью командной строки

· 4 мин. чтения

1. Обзор

В этом руководстве мы узнаем, как мы можем взаимодействовать с компилятором Java через интерфейс командной строки.

В качестве предварительного условия нам необходимо загрузить Java и настроить переменную среды JAVA_HOME на нашем компьютере.

2. Компиляция одного файла исходного кода Java

Java предоставляет простой инструмент — javac для компиляции файлов исходного кода Java. Начнем с компиляции небольшого класса Car.java :

public class Car {
private String make;
private String model;

// standard setters and getters
}

Мы можем скомпилировать это из одной команды в каталоге, где находится этот файл:

javac Car.java

Если все работает без ошибок, вывода не будет. Компилятор создаст Car.class, содержащий байт-код, в текущем рабочем каталоге.

3. Компиляция нескольких файлов исходного кода

Обычно наши программы используют более одного файла класса. Давайте теперь посмотрим, как мы можем скомпилировать простую программу с несколькими классами.

Во-первых, добавим два новых типа: Owner.java и History.java :

public class Car {
private String make;
private String model;
private Owner owner;
private History history;
}
public class Owner {
private String name;
}
public class History {
private String details;
}

Теперь нам нужно запустить следующую команду для компиляции:

javac Owner.java Car.java History.java

Следует отметить, что, поскольку классы, используемые классом Car , находятся в одном каталоге, на самом деле указывать их не обязательно. Мы все еще можем просто скомпилировать Car.java .

4. Основные параметры компилятора Java

До сих пор мы просто использовали команду javac без каких-либо дополнительных параметров, просто передавая имена наших классов в качестве параметров. Тем не менее, мы также можем настроить его. Мы можем указать компилятору Java, где найти классы наших библиотек, базовый путь, где находится наш код, и где сгенерировать конечный результат.

Давайте подробнее рассмотрим некоторые из этих вариантов.

  • -cp или -classpath
  • -исходный путь
  • -d (каталог)

4.1. Что такое параметр -cp или -classpath ?

Используя путь к классам, мы можем определить набор каталогов или файлов, таких как *.jar , *.zip , от которых зависит наш исходный код во время компиляции. В качестве альтернативы мы можем установить переменную среды CLASSPATH .

Следует отметить, что параметр classpath имеет более высокий приоритет, чем переменная окружения .

Если ни один из них не указан, предполагается, что путь к классам является текущим каталогом. Когда мы хотим указать несколько каталогов, разделителем путей является ' : ' для большинства операционных систем, кроме Windows, где он ' ; '.

4.2. Что такое параметр -sourcepath ?

Эта опция позволяет указать верхний каталог, в котором находится весь наш исходный код, требующий компиляции.

Если не указано, путь к классам сканируется на наличие источников.

4.3. Что такое опция -d ?

Мы используем эту опцию, когда хотим иметь все скомпилированные результаты в одном месте, отдельно от исходного кода. Мы должны иметь в виду, что путь, который мы хотим указать, должен существовать заранее .

Во время компиляции этот путь используется как корневой каталог, а вложенные папки создаются автоматически в соответствии со структурой пакета классов. Если этот параметр не указан, каждый отдельный файл *.class записывается рядом с соответствующим файлом исходного кода *.java .

5. Компиляция с внешней библиотекой

Помимо классов, которые мы создаем, нам также необходимо использовать внешние библиотеки в наших программах. Теперь рассмотрим более сложный пример:

библиотеки/ ├─ гуава-31.1-jre.jar модель/ ├─ Car.java ├─ История.java ├─ Владелец.java оказание услуг/ ├─ CarService.java цель/

Здесь мы организовали наши классы в пакеты. Кроме того, мы представили каталоги target и libs для размещения скомпилированных результатов и библиотек соответственно.

Допустим, мы хотим использовать класс ImmutableSet , предоставляемый библиотекой Guava . Скачиваем и помещаем в папку libs . Затем в пакете службы мы вводим новый класс, который использует внешнюю библиотеку в CarService.java :

package service;

import model.Car;
import java.util.Set;

import com.google.common.collect.ImmutableSet;

public class CarService {

public Set<Car> getCars() {

Car car1 = new Car();
Car car2 = new Car();

ImmutableSet<Car> cars = ImmutableSet.<Car>builder()
.add(car1)
.add(car2)
.build();
return cars;
}
}

Теперь пришло время скомпилировать наш проект:

javac -classpath libs/*:. -d target -sourcepath . service/CarService.java model/*.java

Мы включили папку libs в наш путь к классам с помощью -cp .

библиотеки/ ├─ гуава-31.1-jre.jar модель/ ├─ Car.java ├─ История.java ├─ Владелец.java оказание услуг/ ├─ CarService.java цель/ ├─ модель/ │ ├─ Автомобиль.класс │ ├─ History.class │ ├─ Владелец.класс ├─ обслуживание/ │ ├─ CarService.класс

Как мы видим, javac успешно разрешил внешний класс ImmutbleSet и поместил скомпилированные классы в целевую папку.

6. Заключение

В этой статье мы узнали, как можно скомпилировать несколько файлов исходного кода, даже если у нас есть зависимости от внешних библиотек.

Кроме того, мы кратко рассмотрели некоторые важные параметры, которыми мы можем воспользоваться во время сложных задач компиляции.