Что является результатом сборки Java приложения
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что является результатом сборки Java приложения
В Java процесс сборки (build) приложения — это комплексный процесс трансформации исходного кода в исполняемую форму. Результаты этого процесса зависят от типа приложения и используемого инструмента сборки, но обычно это JAR, WAR или EAR файлы, а также различные артефакты и артефакты, необходимые для развертывания.
Основной результат: JAR файл
JAR (Java Archive) — это архивный файл, являющийся основным результатом сборки Java приложения.
Исходный код (.java) → Компиляция → Байт-код (.class) → Упаковка → JAR файл
JAR файл это просто ZIP архив, содержащий:
- Скомпилированные классы (.class файлы) в структуре папок, соответствующей пакетам
- Ресурсы (конфигурационные файлы, изображения, XML и т.д.)
- MANIFEST.MF — файл манифеста с метаинформацией
- Зависимости (библиотеки) — в случае fat JAR или über JAR
my-app.jar
├── META-INF/
│ └── MANIFEST.MF
├── com/
│ └── example/
│ ├── Main.class
│ ├── UserService.class
│ └── User.class
├── application.properties
└── lib/
├── spring-core-5.3.0.jar
└── slf4j-api-1.7.30.jar
Файл манифеста (MANIFEST.MF)
Центральная часть JAR файла — манифест с ключевой информацией:
Manifest-Version: 1.0
Main-Class: com.example.Main
Implementation-Version: 1.0.0
Implementation-Title: My Application
Main-Class — это критический параметр, указывающий класс с методом main(), который будет выполнен при запуске JAR файла.
Типы результатов сборки
1. JAR (Java ARchive) — для приложений и библиотек
java -jar my-app.jar
2. Thin JAR — только класс приложения
Содержит только исходный код приложения, зависимости находятся отдельно в папке lib/:
my-app.jar (500 KB)
lib/
├── spring-core-5.3.0.jar
├── spring-beans-5.3.0.jar
└── ... другие зависимости
3. Über JAR (Fat JAR) — включает все зависимости
Это самодостаточный JAR файл, содержащий весь код приложения и все его зависимости:
my-app-1.0.0-SNAPSHOT.jar (50 MB)
Spring Boot по умолчанию создает именно über JAR:
// pom.xml для создания Fat JAR
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.0</version>
</plugin>
4. WAR (Web ARchive) — для веб-приложений
Структура WAR для web-приложений:
my-web-app.war
├── META-INF/
│ └── MANIFEST.MF
├── WEB-INF/
│ ├── classes/
│ │ └── com/example/*.class
│ ├── lib/
│ │ └── *.jar
│ └── web.xml
├── index.jsp
└── static/
├── css/
└── js/
5. EAR (Enterprise ARchive) — для enterprise приложений
Conтейнер для нескольких модулей (JAR + WAR):
my-enterprise-app.ear
├── application.xml
├── my-web-app.war
└── my-business-logic.jar
Процесс сборки с Maven
Popular инструмент сборки Maven создает результаты в папке target/:
mvn clean package
Результаты:
target/
├── classes/
│ └── скомпилированные .class файлы
├── test-classes/
│ └── скомпилированные тесты
├── my-app-1.0.0.jar
├── my-app-1.0.0-sources.jar
├── my-app-1.0.0-javadoc.jar
└── surefire-reports/
└── результаты тестов
Процесс сборки с Gradle
gradle build
Результаты в build/:
build/
├── classes/
├── libs/
│ └── my-app-1.0.0.jar
└── test-results/
Пример создания JAR с указанием Main-Class
// Main.java
public class Main {
public static void main(String[] args) {
System.out.println("Hello from JAR!");
}
}
# Компиляция
javac Main.java
# Создание файла манифеста
echo "Main-Class: Main" > manifest.txt
# Создание JAR
jar cfm my-app.jar manifest.txt Main.class
# Запуск
java -jar my-app.jar
# Output: Hello from JAR!
Дополнительные артефакты сборки
- Source JAR — исходные коды (.java файлы)
- JavaDoc JAR — генерированная документация
- Checksum файлы (MD5, SHA) — для проверки целостности
- Dependency reports — информация о зависимостях
- Code coverage reports — покрытие тестами
Заключение
Результат сборки Java приложения — это прежде всего JAR файл (или WAR/EAR в зависимости от типа приложения), который содержит скомпилированный байт-код, ресурсы и метаинформацию для выполнения приложения на виртуальной машине Java. Für современных приложений часто используется über JAR (Fat JAR) с встроенными зависимостями, что упрощает развертывание и запуск приложения.