Какой командой компилируется программа на Java?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Компиляция Java программ
Основная команда: javac
Для компиляции Java программ используется команда javac (Java Compiler). Это инструмент из Java Development Kit (JDK), который преобразует исходный код .java файлов в скомпилированный байт-код .class.
Базовый синтаксис
javac ИмяФайла.java
Эта команда компилирует файл и создаёт файл ИмяФайла.class:
# Файл до компиляции
HelloWorld.java
# После компиляции
HelloWorld.class
Пример простой программы
// HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
# Компиляция
javac HelloWorld.java
# Запуск
java HelloWorld
Компиляция нескольких файлов
# Все .java файлы в текущей директории
javac *.java
# Конкретные файлы
javac File1.java File2.java File3.java
# Все файлы в папке
javac src/*.java
# Рекурсивно все файлы
javac -r src/
Важные флаги javac
# -d: Директория для output .class файлов
javac -d bin/ src/HelloWorld.java
# Создаст bin/HelloWorld.class
# -cp или -classpath: Путь к зависимостям
javac -cp lib/library.jar src/Main.java
# -sourcepath: Где искать исходные файлы
javac -sourcepath src/ -d bin/ src/Main.java
# -version: Целевая версия Java
javac -source 11 -target 11 HelloWorld.java
# -encoding: Кодировка исходных файлов
javac -encoding UTF-8 HelloWorld.java
# -deprecation: Показывать предупреждения о deprecated коде
javac -deprecation HelloWorld.java
# -Xlint: Дополнительные предупреждения
javac -Xlint HelloWorld.java
Пример с package структурой
# Структура проекта
project/
├── src/
│ └── com/example/
│ ├── Main.java
│ └── Utils.java
└── bin/
# Компиляция
javac -d bin/ src/com/example/*.java
# Результат
bin/
└── com/example/
├── Main.class
└── Utils.class
Классический workflow: javac + java
# Структура проекта
my-app/
├── src/
│ └── Calculator.java
└── bin/
# Шаг 1: Компилируем
cd my-app
javac -d bin/ src/Calculator.java
# Шаг 2: Запускаем
java -cp bin/ Calculator
С внешними зависимостями
# Компиляция с библиотеками
javac -cp lib/json.jar:lib/database.jar -d bin/ src/Main.java
# На Windows (используй ; вместо :)
javac -cp lib\\json.jar;lib\\database.jar -d bin/ src/Main.java
Maven и Gradle (современный подход)
В production разработке используют build tools, которые автоматизируют компиляцию:
# Maven
mvn compile # Компилирует всё
mvn clean # Удаляет target/
# Gradle
./gradlew build # Компилирует и упаковывает
./gradlew compileJava
pom.xml для Maven:
<project>
<name>My App</name>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.9</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Что происходит при компиляции
Компилятор javac выполняет несколько этапов:
1. Лексический анализ — разделить исходный код на токены
HelloWorld.java → ["public", "class", "HelloWorld", ...]
2. Синтаксический анализ — проверить грамматику языка
Проверяет, что { и } совпадают, что методы определены правильно
3. Семантический анализ — проверить типы и ссылки
System.out.println() — существует ли такой метод?
String s = 123; — ошибка типа!
4. Генерация bytecode — создание .class файла
Java bytecode — промежуточное представление (не машинный код)
5. Оптимизация (опционально) — улучшение bytecode
Bytecode и JVM
После компиляции получается bytecode — специальный язык для JVM:
// Java код
int x = 5;
int y = 3;
int result = x + y;
// Becomes bytecode:
LDC 5
ISTORE 1
LDC 3
ISTORE 2
ILOAD 1
ILOAD 2
IADD
ISTORE 3
Этот bytecode одинаков для всех платформ (Linux, Windows, Mac). JVM интерпретирует его под конкретную платформу.
IDE (IntelliJ IDEA, Eclipse, VS Code)
В современных IDE компиляция происходит автоматически:
- При сохранении файла
- При запуске программы
- При сборке проекта
Tы не видишь команду javac, но IDE вызывает её под капотом.
Проверка версии компилятора
javac -version
# javac 11.0.12
javac -fullversion
# javac 11.0.12 (build 11.0.12+7-post-Ubuntu-0ubuntu1.1)
Типичные ошибки при компиляции
# Ошибка 1: Файл не найден
$ javac NonExistent.java
error: file not found: NonExistent.java
# Ошибка 2: Синтаксис ошибка
$ javac Test.java
Test.java:5: error: ';' expected
int x = 5
# Ошибка 3: Класс не найден (часто при неправильной package структуре)
error: cannot find symbol
symbol: class Utils
location: class Main
Заключение
Команда для компиляции Java программы:
javac ИмяФайла.java # Базовая форма
javac -d bin/ src/*.java # С output директорией
javac -cp lib/lib.jar Main.java # С зависимостями
В production используются Maven или Gradle, но под капотом они тоже вызывают javac. Понимание базовой компиляции через javac важно для разработчика, но в повседневной работе ты будешь использовать build tools.