← Назад к вопросам
Как превратить Java исходник в полноценную программу
2.0 Middle🔥 91 комментариев
#Основы Java
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
# Превращение Java исходника в программу
Общий процесс
Это многоэтапный процесс, который включает компиляцию, упаковку и запуск:
Исходный код (.java) → Компиляция → Bytecode (.class) → JVM → Исполнение
Этап 1: Написание исходника
// HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
Требования:
- Имя файла должно совпадать с именем public класса
- Обязательно нужен метод
main(String[] args)чтобы запустить - Нужен JDK (Java Development Kit), не просто JRE
Этап 2: Компиляция
Командная строка
# javac компилирует .java в .class
javac HelloWorld.java
# Результат: HelloWorld.class (bytecode)
ls -la
# HelloWorld.java
# HelloWorld.class
Что происходит при компиляции
- Синтаксический анализ — компилятор проверяет грамматику Java
- Семантический анализ — проверяет типы, области видимости
- Генерация bytecode — создаёт машинный код для JVM
- Создание .class файла — результат компиляции
Пример с несколькими файлами
// User.java
public class User {
private String name;
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
// Main.java
public class Main {
public static void main(String[] args) {
User user = new User("Alice");
System.out.println("Hello, " + user.getName());
}
}
# Скомпилировать оба файла
javac User.java Main.java
# Или просто все .java файлы
javac *.java
# Результат
# User.class
# Main.class
Этап 3: Запуск программы
# java запускает скомпилированный bytecode
java Main
# Выводит: Hello, Alice
Важно:
- Указываем имя класса, БЕЗ расширения .class
- В классе должен быть public static void main(String[] args)
Реальный сценарий: Проект с папками
MyProject/
├── src/
│ ├── com/
│ │ └── example/
│ │ ├── User.java
│ │ ├── Order.java
│ │ └── Main.java
│ └── resources/
│ └── config.properties
└── bin/ (или out/)
└── (скомпилированные .class файлы)
Компиляция с структурой папок
# Компилировать из корня проекта
javac -d bin src/com/example/*.java
# -d bin — выходная директория для .class файлов
# Результат:
# bin/com/example/User.class
# bin/com/example/Order.class
# bin/com/example/Main.class
Запуск с структурой папок
# Нужно указать classpath
java -cp bin com.example.Main
# -cp (classpath) — где искать .class файлы
# com.example.Main — полное имя класса (package.ClassName)
Этап 4: Упаковка в JAR
Для распространения программы упаковываем в JAR архив:
# Создать JAR файл
jar cf MyApp.jar -C bin .
# cf = create file
# -C bin . = добавить всё из папки bin
# Или с манифестом
jar cfe MyApp.jar com.example.Main -C bin .
# e = entry point (главный класс)
Запуск JAR файла
# Если в манифесте указан Main-Class
java -jar MyApp.jar
# Если нет, то указываем явно
java -cp MyApp.jar com.example.Main
Полный пример: От исходника до JAR
Шаг 1: Создание структуры
mkdir MyApp/src MyApp/bin
cd MyApp
Шаг 2: Написание кода
cat > src/HelloApp.java << 'EOF'
public class HelloApp {
public static void main(String[] args) {
if (args.length > 0) {
System.out.println("Hello, " + args[0]);
} else {
System.out.println("Hello, World!");
}
}
}
EOF
Шаг 3: Компиляция
javac -d bin src/HelloApp.java
Шаг 4: Тестирование
java -cp bin HelloApp
# Выводит: Hello, World!
java -cp bin HelloApp Alice
# Выводит: Hello, Alice
Шаг 5: Создание манифеста
cat > src/MANIFEST.MF << 'EOF'
Manifest-Version: 1.0
Main-Class: HelloApp
EOF
Шаг 6: Упаковка в JAR
jar cfm HelloApp.jar src/MANIFEST.MF -C bin .
Шаг 7: Запуск JAR
java -jar HelloApp.jar
# Выводит: Hello, World!
java -jar HelloApp.jar Bob
# Выводит: Hello, Bob
Использование IDE (рекомендуется)
В IntelliJ IDEA или Eclipse процесс проще:
- Создание проекта — File → New → Project
- Написание кода — IDE выделяет ошибки в реальном времени
- Компиляция — автоматическая (Ctrl+B в IntelliJ)
- Запуск — Ctrl+F10 или зелёная кнопка Play
- Упаковка в JAR — File → Project Structure → Artifacts
Использование Build tools (профессиональный подход)
Maven
<!-- pom.xml -->
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.example.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
# Компиляция и упаковка
mvn clean package
# Запуск
java -jar target/my-app-1.0.jar
Gradle
// build.gradle
plugins {
id 'java'
id 'application'
}
application {
mainClass = 'com.example.Main'
}
java {
sourceCompatibility = '11'
targetCompatibility = '11'
}
# Компиляция и упаковка
./gradlew build
# Запуск
java -jar build/libs/my-app.jar
Ошибки и как их исправить
Ошибка 1: "javac: command not found"
# JDK не установлен, установи его
sudo apt-get install openjdk-11-jdk # Linux
brew install openjdk@11 # Mac
# Или скачай с oracle.com
Ошибка 2: "Exception in thread 'main' java.lang.ClassNotFoundException"
# Неправильно указан classpath
java -cp bin Main # Правильно: должен быть путь до .class
java -cp . Main # Если .class в текущей папке
Ошибка 3: "javac: error: no source files"
# Не указаны исходные файлы
javac *.java # Все .java файлы в текущей папке
JVM Options (для оптимизации)
# Выделение памяти
java -Xms512m -Xmx2g -jar MyApp.jar
# -Xms = initial heap size (512 MB)
# -Xmx = maximum heap size (2 GB)
# Включение профилирования
java -XX:+PrintGCDetails -jar MyApp.jar
# Указание временной зоны
java -Duser.timezone=UTC -jar MyApp.jar
Шпаргалка
# 1. Написать исходник
echo 'public class App { public static void main(String[] args) { System.out.println("Hi"); } }' > App.java
# 2. Скомпилировать
javac App.java
# 3. Запустить
java App
# Выводит: Hi
# 4. Упаковать в JAR
jar cfe App.jar App App.class
# 5. Запустить JAR
java -jar App.jar
# Выводит: Hi
Заключение
Полный процесс:
- Написать исходный код (.java)
- Скомпилировать в bytecode (javac → .class)
- Запустить на JVM (java → выполнение)
- Упаковать для распространения (jar → .jar)
Для реальных проектов используй Maven или Gradle — они автоматизируют весь процесс.