
शुद्ध-Go जावा डीकंपाइलर और सीरियलाइज़ेशन ऑपरेटर
एक पोर्टेबल, pure-Go Java टूलकिट — जिसे yaklang से निकालकर और छाँटकर बनाया गया है — जो तीन काम करता है और इसके अलावा कुछ नहीं:
.class / .jar / .war / .zip → पठनीय Java स्रोत।.class फ़ाइल की संरचना का निरीक्षण करें (constant pool,
fields, methods, version, access flags)।पोर्टेबिलिटी और embedding के लिए बनाया गया:
javajive facade package तीनों
क्षमताओं को समाहित करता है; उन्नत उपयोग के लिए sub-packages उपलब्ध रहते हैं।decompile, classinfo, और serial subcommands,
standard library पर आधारित।.class / .jar और
JDK-serialized blobs को javac/java से compile करता है, फिर JavaJive को उनके विरुद्ध सत्यापित करता है
(देखें HARNESS-WORKFLOW.md)।utils / codec / log / go-funk को
एक न्यूनतम, स्व-निहित internal/ core के रूप में पुनः कार्यान्वित किया गया है।पूर्ण 38-JAR differential audit शून्य दर्ज regressions की रिपोर्ट करता है निर्धारित baseline के विरुद्ध: पहले से compile-clean सभी 20 JARs बरकरार हैं और 26 अब पूर्ण रूप से compile होते हैं। Baseline दोष और 4 मौजूदा method stubs दृश्यमान बने हुए हैं। देखें per-JAR परिणाम और पुनरुत्पादन।
250 पृथक semantic round trips compilation, JVM verification, stubs और runtime समानता को अलग-अलग दर्ज करते हैं; मूल application classes पुनर्निर्मित classpaths में अनुपस्थित हैं। CI JDK 17 और 21 पर semantic audit, पूर्ण ऐतिहासिक तुलना, तथा OS/Go और race matrices चलाता है। ये जाँचें प्रत्येक library method की समतुल्यता सिद्ध नहीं करतीं। देखें कार्यान्वयन और शेष सीमाएँ।
निम्नलिखित आँकड़े 2026-09-05 को v0.3.0 के लिए रिपोर्ट किए गए थे। ये वर्तमान-संस्करण के स्वीकृति परिणाम या व्यवहारिक समतुल्यता का प्रमाण नहीं हैं।
34 वास्तविक jars (18,759 flattened units) पर decompile → javac --release 8
recompile → repackage → JVM verify के माध्यम से मापा गया:
Outer$Inner.java)
शून्य javac errors के साथ recompile होते हैं, और सभी 34 jars में 0 syntax errors (एक CI-प्रवर्तित
hard assertion, ताकि कोई type error lexer विफलता के पीछे न छिप सके)।-Xverify:all per-class verification end-to-end पास होती है (codec call differential के अंतर्गत
मूल jar के byte-identical है)। provenClean में लॉक किया गया।पूर्ण कार्यप्रणाली, per-jar तालिकाओं और पुनरुत्पादन कमांड के लिए देखें BENCHMARK.md।
# CLI
go install github.com/yaklang/javajive/cmd/javajive@latest
# Library
go get github.com/yaklang/javajive@latest
या स्रोत से build करें:
git clone https://github.com/yaklang/javajive
cd javajive
go build -o javajive ./cmd/javajive
Go 1.22+ आवश्यक है।
javajive <command> [arguments]
Commands:
decompile decompile .class/.jar/.war/.zip or a directory into Java source
classinfo print the structure of a .class file (version, fields, methods)
serial Java serialization tools (subcommands: tojson, fromjson)
version print the version
help show help
# Single class: prints to stdout by default, or -o to write a file.
javajive decompile Foo.class
javajive decompile Foo.class -o Foo.java
# Archive: defaults to a "<input>.src" directory, or -o to choose one.
javajive decompile app.jar
javajive decompile app.war -o ./app-src
# Directory: recursively decompile .class files (requires -o output dir).
javajive decompile ./classes -o ./src
javajive classinfo Foo.class
class: InvisibleAnnoSeed
super: java/lang/Object
version: 61.0
access: public
constants: 18
fields (0):
methods (2):
<init>()V
run()I
# Serialized binary -> JSON. (-hex: input is a hex string, -: read from stdin)
javajive serial tojson dump.bin
printf 'aced000574000568656c6c6f' | javajive serial tojson -hex -
# JSON -> serialized binary. (default prints hex; with -o writes raw bytes)
javajive serial fromjson dump.json -o out.bin
javajive serial fromjson dump.json # prints hex
एकीकृत facade package का उपयोग करें — एक import तीनों क्षमताओं को कवर करता है:
import "github.com/yaklang/javajive"
// Decompile a single class, or a whole archive into a directory.
src, err := javajive.Decompile(classBytes)
err = javajive.DecompileArchive("app.jar", "app-src")
// Inspect class structure.
obj, err := javajive.ParseClass(classBytes)
_ = obj.GetClassName()
// Java serialization: binary -> JSON -> binary.
objs, _ := javajive.ParseSerialized(raw) // or ParseSerializedHex(hexStr)
jsonBytes, _ := javajive.SerializedToJSON(objs...)
restored, _ := javajive.SerializedFromJSON(jsonBytes)
out := javajive.MarshalSerialized(restored...)