Чтобы декомпилировать весь JAR-файл, откройте его в JD-GUI через File → Open File… или просто перетащите в окно программы. Затем выберите File → Save All Sources (Ctrl+Alt+S, на macOS Cmd+Alt+S). JD-GUI соберёт архив с расширением .src.zip, внутри лежат файлы .java в той же структуре пакетов, что и в JAR.
Классы с символом $ в имени отдельными файлами не сохраняются: их код окажется внутри внешнего класса. Если JD-GUI плохо разбирает свежий синтаксис Java, подойдут консольные CFR или Vineflower. Как просто запустить или открыть архив без декомпиляции, мы разобрали в статье «Как открыть файл JAR».
SkillboxПрофессия Java-разработчик + ИИ191 390 ₽8 месяцев
НетологияПрофессия «Java-разработчик с нуля»99 500 ₽11 месяцев
SkillFactoryПрофессия Java-разработчик140 040 ₽8 месяцев
ЭдюсонJava-разработчик133 900 ₽8 месяцев
ProductStarJava-разработчик50 112 ₽9 месяцев
HexletJava-разработчик85 000 ₽10 месяцев
Что понадобится перед декомпиляцией

Все декомпиляторы из этой статьи написаны на Java, поэтому на компьютере должна стоять Java. Если её нет, сначала пройдите нашу инструкцию по установке Java на Windows, macOS и Linux.
Дальше выбирайте инструмент под задачу:
| Инструмент | Как работает | Последний выпуск | Лицензия |
|---|---|---|---|
| JD-GUI | окно с деревом классов | 1.6.6, 25 декабря 2019 | GPL-3.0 |
| CFR | командная строка | 0.152, 11 декабря 2021 | MIT |
| Vineflower | командная строка, плагин для IntelliJ IDEA | 1.12.0, 29 апреля 2026 | Apache-2.0 |
| Fernflower | встроен в IntelliJ IDEA, есть консольный режим | выходит вместе с IntelliJ | Apache-2.0 |
Для разового просмотра хватит JD-GUI. Если нужно выгрузить исходники из десятков архивов или из одного огромного, удобнее консольный инструмент: его можно вызвать из скрипта.
Как декомпилировать JAR в JD-GUI: пошагово
Интерфейс у JD-GUI только английский, поэтому пункты меню привожу так, как они написаны в программе.
- Откройте страницу выпусков JD-GUI на GitHub и скачайте файл под свою систему:
jd-gui-windows-1.6.6.zipдля Windows,jd-gui-osx-1.6.6.tarдля macOS,.debили.rpmдля Linux. Есть и универсальныйjd-gui-1.6.6.jar, он запускается на любой системе с Java. - Запустите программу:
jd-gui.exeв Windows, приложение JD-GUI в macOS или командуjava -jar jd-gui-1.6.6.jarв терминале. - Откройте архив через File → Open File… (Ctrl+O) или перетащите JAR из проводника в окно.
- Слева появится дерево пакетов. Кликните по классу, и справа откроется восстановленный код.
- Выберите File → Save All Sources или нажмите Ctrl+Alt+S.
- Укажите папку. Программа предложит имя архива, которое заканчивается на
.src.zip. - Распакуйте архив любым архиватором. Внутри будут файлы .java, разложенные по папкам пакетов.
Save All Sources работает не только с JAR. В коде JD-GUI тот же механизм сохранения подключён для .war, .ear, .aar, .jmod и обычных .zip, так что веб-приложение или Android-библиотеку выгружают так же.
Почему нет файлов с $: «проблема подклассов»

Откройте любой JAR в архиваторе, и рядом с Order.class почти наверняка найдутся Order$Item.class и Order$1.class. Так выглядят вложенные классы, наследование тут ни при чём. Их проходят вместе с основами ООП, этот этап есть в нашем плане, как стать Java-программистом. Компилятор кладёт каждый из них в отдельный файл, а имя строит по правилам спецификации языка Java, раздел 13.1:
- класс-член: имя внешнего класса, $ и простое имя, например
Order$Item; - анонимный класс: имя внешнего класса, $ и номер, например
Order$1; - локальный класс внутри метода: имя внешнего класса, $, номер и имя, например
Order$1Local.
Для примера, такой набор в архиве:
com/example/Order.class
com/example/Order$Item.class
com/example/Order$1.class
после Save All Sources превратится в один файл com/example/Order.java. В исходниках JD-GUI файлы с $ в счёт сохраняемых не идут: декомпилятор разбирает их вместе с внешним классом и вставляет код внутрь него.
Решение: не ищите Order$1.java, откройте Order.java. И декомпилируйте архив целиком, а не отдельный файл с $: без внешнего класса вложенный выглядит обрывком.
У консольных инструментов то же поведение по умолчанию. В CFR за это отвечает опция --innerclasses, она включена (в списке опций CFR: «Decompile inner classes»). У Fernflower это din со значением 1 по умолчанию.
Декомпиляция из командной строки: CFR, Vineflower, Fernflower
Консольный вариант нужен, когда архивов много, когда архив огромный или когда исходники надо выгружать скриптом. Команды ниже взяты из README самих проектов, подставьте свои имена файлов.
CFR
По документации CFR достаточно передать путь к JAR и папку для результата:
java -jar cfr-0.152.jar app.jar --outputdir src
Для огромного архива пригодится --jarfilter: CFR разберёт только классы, полное имя которых подходит под регулярное выражение. Например, только ваш пакет без сторонних библиотек:
java -jar cfr-0.152.jar app.jar --outputdir src --jarfilter com.example
Сам CFR целиком написан на Java 6, поэтому запустится почти на любой установленной Java. С новыми возможностями языка сложнее: в README CFR сказано про «большую часть» Java 9, 12 и 14.
Vineflower
Vineflower вырос из Fernflower и Quiltflower. В README Vineflower заявлена поддержка Java 21 и новее: records, sealed-классы, switch-выражения, сопоставление с образцом. Команда:
java -jar vineflower-1.12.0.jar app.jar src/
Учтите требование к Java: версии Vineflower от 1.11 запускаются только на Java 17 и новее.
Fernflower
Это тот самый движок, который встроен в IntelliJ IDEA. Формат команды из README:
java -jar fernflower.jar -dgs=1 app.jar src/
Отдельные выпуски Fernflower JetBrains публикует в своём репозитории IntelliJ, а не на странице GitHub, поэтому новичку проще взять Vineflower: у него обычные выпуски с готовым JAR. Если карьера в Java только начинается, пригодится и наш план, как стать Java-разработчиком.
Как посмотреть код в IntelliJ IDEA
Если вам нужен не весь архив, а пара классов из библиотеки, JD-GUI можно не ставить. По справке IntelliJ IDEA декомпилятор на базе Fernflower включён по умолчанию:
- Откройте в редакторе скомпилированный файл .class.
- При первом открытии IDE покажет окно JetBrains Decompiler с условиями. Примите их, и окно больше не появится.
- Над кодом появится плашка о том, что файл декомпилирован. В таком коде можно ставить точки останова.
Если код не показывается, загляните в настройки: Ctrl+Alt+S, раздел Plugins. Там найдите плагин Java Bytecode Decompiler и нажмите Enable.
Чтобы выгрузить архив целиком в файлы .java, берите консольные инструменты из прошлого раздела. А если хотите, чтобы IDE показывала код через Vineflower, поставьте его плагин: по README он заменяет Fernflower внутри IntelliJ IDEA.
Работу в самой IDE разбирают на курсах по IntelliJ IDEA, а если вам ближе другая среда, загляните в наш разбор Eclipse.
Частые проблемы и что с ними делать

jd-gui.exe не запускается и просит Java
Обёртка для Windows ищет Java по переменной окружения JAVA_HOME: так она настроена в сборочном файле JD-GUI.
Решение: пропишите JAVA_HOME на папку с установленной Java или запустите универсальный jd-gui-1.6.6.jar командой java -jar.
Пункт Save All Sources серый
Пункт включается, когда в окне выбрана вкладка открытого архива. Если архив не открыт, нажать его нельзя.
Решение: откройте архив заново или переключитесь на его вкладку и нажмите Ctrl+Alt+S ещё раз.
Вместо имён классов и методов буквы a, b, c
Архив обфусцирован: исходные имена при сборке заменили короткими, и декомпилятор их не восстановит. У Fernflower есть опция -ren=1, она переименовывает неоднозначные и обфусцированные элементы, чтобы код хотя бы читался без путаницы.
Нет комментариев и названий переменных
Комментариев в байткоде нет вообще. Имена локальных переменных попадают в .class, только если код собирали с отладочной информацией: по документации javac ключ -g добавляет её целиком, а по умолчанию сохраняются только номера строк и имя исходного файла. Поэтому вместо price вы часто увидите var1.
Свежий синтаксис выглядит странно
Последний выпуск JD-GUI вышел в декабре 2019 года. Если в коде records или новые формы switch и результат выглядит запутанным, прогоните тот же JAR через Vineflower.
Можно ли декомпилировать чужой JAR
Свой код декомпилируйте сколько угодно, например когда исходники потерялись, а собранный JAR остался.
С чужим сложнее. Пункт 3 статьи 1280 ГК РФ разрешает лицу, правомерно владеющему экземпляром программы, декомпилировать её без согласия правообладателя, но только ради совместимости своей независимо написанной программы с другими. Условий три:
- нужной для совместимости информации не было в других источниках;
- декомпилируются только те части программы, которые для этого нужны;
- полученное используется только для совместимости, его нельзя передавать другим и нельзя брать для разработки программы, по своему виду существенно схожей с декомпилируемой.
Профессиональным разбором чужих программ занимаются реверс-инженеры, подробнее в нашем материале о том, как устроена эта работа.
Где освоить Java системно
Декомпилятор показывает, что внутри готового архива, но читать восстановленный код без знания языка тяжело. Если хотите понимать, как устроены классы, сборка и библиотеки, посмотрите курсы по Java и наш обзор профессии Java-разработчика.
| Курс | Школа | Стоимость со скидкой | В рассрочку | Длительность | Обзор курса от Checkroi |
|---|---|---|---|---|---|
| Профессия Java-разработчик + ИИ Перейти на сайт курса | 191 390 ₽ | 5617 ₽/мес. | 8 месяцев | Обзор курса | |
| Профессия «Java-разработчик с нуля» Перейти на сайт курса | 99 500 ₽ | 5625 ₽/мес. | 11 месяцев | Обзор курса | |
| Профессия Java-разработчик Перейти на сайт курса | 140 040 ₽ | 3890 ₽/мес. | 8 месяцев | Обзор курса | |
| Профессия «Java-разработчик PRO» Перейти на сайт курса | 181 500 ₽ | 5855 ₽/мес. | 12 месяцев | Обзор курса | |
| Java-разработчик Перейти на сайт курса | 133 900 ₽ | 5579 ₽/мес. | 8 месяцев | Обзор курса |
Больше программ — в полном каталоге курсов по Java-разработке




