MCPcopy Index your code
hub / github.com/Liubsyy/JarEditor

github.com/Liubsyy/JarEditor @v3.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v3.0 ↗ · + Follow
733 symbols 2,187 edges 138 files 165 documented · 23% updated 2mo agov3.0 · 2026-02-14★ 78710 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

JarEditor liubsyy

English | 简体中文

License downloads release sdk Featured|HelloGitHub

IDEA plugin for modifying files in jar directly without decompression, including class and resource files.

Plugin marketplace : https://plugins.jetbrains.com/plugin/24397-jareditor

Features

  • Edit class/resource file in jar directly without decompression
  • Add/Delete/Rename file/directory in jar
  • Search the contents of the jar package
  • Copy/Paste file/directory to/from clipboard
  • Support SpringBoot jar/nested jar/war/ear/zip/aar
  • Support kotlin
  • Export source jar
  • Support class bytes tool : Javassist/VisualClassBytes
  • Decompilers : Fernflower/CFR/Procyon/Jadx

Quick start

1. Install plugin from marketplace

First install the plugin JarEditor from marketplace, IDEA at least version 2020.3

2. Edit and Build Jar

After installation , you can see a tab page to switch to Jar Editor in the .class decompiled file.

External jar : File->Project Structure->Libraries->Add Library , then you can see the decompiled jar.

Nested jar : Right click on nested jar->JarEditor->Structure->Expand Nested Jar

After modification, click Save(Compile) to compile and save the currently modified java content.

Finally click Build Jar to write the compiled and saved class file into the Jar package.

Modifying the resource files in the jar package is also supported.

Here is an example:

3. Class bytes tool

For obfuscated jars, the decompilation result is not satisfactory. In this case, you can use tools to directly modify the bytecode. Click the Class bytes tool icon to select the tool

  • Javassist : Field/method/constructor/static code can be modified/added/deleted (include inner class)

4. Other operations of JarEditor

In the project view of the jar package, right-click to see JarEditor->New/Delete and other operations, where you can add/delete/rename/copy/paste/export/backup files.

Click the Search icon to search the contents of the jar package. If it is a class jar, it will be searched based on the decompiled content.

Some mechanisms

  • The JDK that the compilation depends on is the JDK of your SDK list. You can choose SDK and target version of the compiled class.
  • The classpath you depend on when compiling java is the project's Libraries dependency. If the dependency package cannot be found, you can add Libraries(File->Project Structure->Libraries).
  • Save(Compile) will save the modified files to the subdirectory jar_edit_out of the directory where the jar package is located. Build Jar will incrementally write the modified files to jar, and finally delete this directory.

SDK Default Versions

When compiling and selecting SDK Default, the runtime JDK (JBR) integrated by Jetbrains is used. If SDK Default is not selected, the JDK installed by the specific user will be used.

IDEA JDK
IDEA 2020.3 - IDEA 2022.1 JBR JDK11
IDEA 2022.2 - IDEA 2024.1 JBR JDK17
IDEA 2024.2 and later JBR JDK21

Extension points exported contracts — how you extend this code

IDecompiler (Interface)
@author Liubsyy @date 2024/10/8 [8 implementers]
src/main/java/com/liubs/jareditor/decompile/IDecompiler.java
ITextParser (Interface)
@author Liubsyy @date 2024/5/15 [6 implementers]
src/main/java/com/liubs/jareditor/template/ITextParser.java
ISignature (Interface)
@author Liubsyy @date 2024/8/28 [8 implementers]
src/main/java/com/liubs/jareditor/bytestool/javassist/ISignature.java
IDependencyHandler (Interface)
@author Liubsyy @date 2024/5/19 [6 implementers]
src/main/java/com/liubs/jareditor/dependency/IDependencyHandler.java
IMyCompiler (Interface)
@author Liubsyy @date 2024/5/17 [4 implementers]
src/main/java/com/liubs/jareditor/compile/IMyCompiler.java

Core symbols most depended-on inside this repo

getPath
called by 105
src/main/java/com/liubs/jareditor/persistent/SDKSettingStorage.java
getInstance
called by 94
src/main/java/com/liubs/jareditor/ext/MyJarFileSystem.java
getName
called by 74
src/main/java/com/liubs/jareditor/editor/MyJarEditor.java
isEmpty
called by 63
src/main/java/com/liubs/jareditor/util/StringUtils.java
warning
called by 48
src/main/java/com/liubs/jareditor/sdk/NoticeInfo.java
error
called by 38
src/main/java/com/liubs/jareditor/sdk/NoticeInfo.java
getText
called by 30
src/main/java/com/liubs/jareditor/template/TemplateManager.java
split
called by 27
src/main/java/com/liubs/jareditor/ext/JarLikeSupports.java

Shape

Method 589
Class 128
Interface 10
Enum 5
Function 1

Languages

Java100%
Kotlin1%

Modules by API surface

src/main/java/com/liubs/jareditor/bytestool/javassist/JavassistClassHolder.java34 symbols
src/main/java/com/liubs/jareditor/editor/MyJarEditor.java29 symbols
src/main/java/com/liubs/jareditor/backup/BackupDialog.java28 symbols
src/main/java/com/liubs/jareditor/persistent/SDKSettingStorage.java24 symbols
src/main/java/com/liubs/jareditor/structure/JarDoubleClickProvider.java22 symbols
src/main/java/com/liubs/jareditor/bytestool/javassist/JavassistDialog.java17 symbols
src/main/java/com/liubs/jareditor/sdk/SDKSettingDialog.java15 symbols
src/main/java/com/liubs/jareditor/util/MyPathUtil.java14 symbols
src/main/java/com/liubs/jareditor/search/SearchInJarPanel.java13 symbols
src/main/java/com/liubs/jareditor/jarbuild/JarBuilder.java13 symbols
src/main/java/com/liubs/jareditor/editor/SourceJarResolver.java13 symbols
src/main/java/com/liubs/jareditor/entity/SplitResult.java12 symbols

For agents

$ claude mcp add JarEditor \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact