← На главнуюСерия статейJava: ВступлениеВступительный цикл постов про устройство Java, JVM и разработке на них.

Java №5. Банки Java

Время поговорить о том, как хранится ваше java приложение. Вы когда-нибудь кидали мод в папку mods и думали: «ну, это просто какой-то .jar файл»?

Так вот, поздравляю: вы уже работали с упакованным Java-приложением. Просто оно было в банке. Да, именно отсюда и название: JAR — Java ARchive. Архив Java. Банка Java.

Давайте разберёмся, что вообще происходит с Java-кодом в процессе и после того, как мы его написали.


Первый формат, который мы встречаем, — это .java. Это обычный файл исходного кода. Именно в нём мы пишем классы, методы, поля, условия, циклы и весь тот прекрасный хаос, который потом почему-то должен работать.

Например:

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello!");
    }
}

Но как мы помним, JVM не выполняет .java напрямую, ей нужен байткод. Поэтому после компиляции .java превращается в .class.


.class — это уже не исходный код, а скомпилированный Java-байткод. Его может читать и выполнять JVM. Если совсем грубо:

.java  ->  .class
пишем     запускает JVM

И вот тут появляется проблема.

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

Поэтому всё складывают в .jar.


.jar — это ZIP-архив, внутри которого лежат .class файлы и дополнительные ресурсы приложения.

Если открыть jar как обычный архив, внутри можно увидеть что-то такое:

com/example/mymod/Main.class
com/example/mymod/CoolBlock.class
assets/mymod/textures/block/cool_block.png
assets/mymod/lang/ru_ru.json
data/mymod/recipes/cool_sword.json
META-INF/MANIFEST.MF
fabric.mod.json

И вот тут как раз и разгадка, мод, который вы кидаете в Minecraft, — это не «загадочный файл для Forge». Это Java-архив, внутри которого лежит код, ресурсы и описание того, как загрузчику модов с этим всем работать.

Обычное Java-приложение может запускаться само, если внутри jar указан главный класс. Это такая точка входа, откуда JVM начинает работу. А моды работают немного иначе.

Модовый jar обычно не запускается сам по себе. Его подхватывает загрузчик — Forge или Fabric. Он смотрит внутрь архива, читает метаданные, находит нужные классы и подключает их к Minecraft.


Внутри модов часто лежит не только код. Там могут быть:

  • текстуры;
  • модели;
  • переводы;
  • рецепты;
  • настройки;
  • описания блоков и предметов;
  • mixin-конфиги;
  • метаданные для Forge или Fabric.

Именно поэтому мод — это не просто «кусок Java-кода». Это маленькое приложение, которое встраивается в большое приложение.


Кстати, похожая идея есть и у .apk на Android. APK — это тоже архив с кодом, ресурсами и метаданными. Правда, внутри Android уже своя кухня: там не просто обычные .class, а отдельный формат вроде .dex.

Но принцип похожий: берём приложение, складываем его код и ресурсы в один архив, а потом специальная среда понимает, как это всё запускать.

Если совсем коротко:

.java  — исходный код, который пишет разработчик
.class — байткод, который понимает JVM
.jar   — архив, куда складывают классы и ресурсы

И если мы говорим про моддинг Minecraft, то сборка мода — это по сути сборка полноценного Java-приложения.

R
АвторБессонный Кодер

Пишу о разработке, системах и играх.

Telegram-канал

Продолжить чтение

Похожие материалы

Статья

Java №3. Что такое JVM

Мы привыкли к мы привыкли думать, что когда вы запускаете программу — компьютер исполняет машинный

Статья

Java №6. А что дальше?

Ну и давайте вообще поговорим, чем вообще может стать Java для вас (в особенности для более молодых

Статья

Размышляем о Головоломке: важность печали и опасность экстремального оптимизма

Совсем недавно (как минимум по меркам даты написания этого сценария), на большие экраны вышла Голов

Статья

Этика игр №7. Конец

Подводя к концу цикл постов про этику игр, мы вместе затронули несколько разных тем, в которых люди

Статья

Java №2. Чем помогла Minecraft-у java

Как мне кажется, одной из важных частей успеха Minecraft — тот факт что он написан на Java. Да, ин

Статья

Этика игр №6. Зависимость от игр

А вы задумывались, откуда и почему вообще появляется эта страшная и непонятная — игровая зави

Статья

Java №1. Java — не просто название в версии майна

Что тут сказать, я обещал вам Java, время исполнять обещание. Надеюсь на хорошую обратную связь, а

Статья

Этика игр №2. Что дают игры

![https://s3 ru1.redguy.ru/site assets/blogs/etics about games 2 what games gives/header.jpg](https

Статья

Этика игр №5. MMO

Говоря об этике и социальной стороне игр, крайне трудно не упомянуть жанр MMO и MMO подобных иг