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-приложения.
Продолжить чтение
Похожие материалы
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 подобных иг