[elnapolva] Decompile + compile

Fórumok

Javában nem vagyok valami otthonos, most mégis arra lenne szükségem, hogy egy apró változtatás erejéig belenyúljak egy programba. A legjobb ingyenes (webes kimenetet is adó) adatbázis-vizualizátort a schemaSpy személyében ismerem; ebbe szeretnék belenyúlni. (Az is segítség, ha valaki megmondja, hogy paraméterezéssel hogy lehet e programban színeket változtatni az idegen kulcsokat összekötő vonalakon.)

A schemaSpy program a graphvizt (és a dotot) használja megjelenítőként, és ennek a leírásában szépen látszik, hogy pl. az edge [=red] révén piros vonalakat lehet húzni. Rá is jöttem, hogy a net/sourceforge/schemaspy/view/DotFormatter.class-ban kellene egy kicsit matatnom. Itt találtam néhány dekompillátort; az egyik egész jónak tűnik. Meglepő módon nem a JAD, JD, classeditor, Krakatau vagy a procyon jött be, hanem a cfr.

A fő kérdésem az, hogy a módosítás után (vagy akár módosítás nélkül) hogyan kell újra fordítani a programot linux alatt? Lehetséges-e ez úgy, hogy csak a DotFormatter.class fájlt dekompilláltam, vagy minden dependenciát dekompillálni kell? Ha csak simán nekiesek javac ...-vel, ad egy csomó "cannot find symbol" hibát.

(Ezt találtam, de talán van ennél egyszerűbb út is.)

Hozzászólások

Ez spec azért nem fordul le, mert az object[0-9]+ változók mind Object-ként vannak deklarálva (a hasNext() pl. a java.util.Iterator metódusa, az object4-nél erre panaszkodik). Kipróbáltam közben a JD-GUI-val is, az is lefordíthatlan kódot dob ki, azzal meg korábban hivatkozik később definiált változókra.

(közben egy tipp: ha jól látom, rossz fájlt nézel, a DotConnector osztály kell neked)

BlackY

Köszi a tesztelést. Nemes egyszerűséggel az a helyzet, hogy hibázott az általam favorizált decompiler (is).

A forráskódból kivett .java fájlt átírva és berakva a már lefordított könyvtárrendszerbe, különösebb agyonparaméterezés nélkül, egyetlen javac paranccsal sikerült lefordítani a kiszemelt kódot (azaz valóban elég volt neki, ha .class-ként vannak körülötte a dependenciák). Konkrétan a "javac net/sourceforge/schemaspy/view/DotFormatter.java" parancs kellett neki. Az fontos volt, hogy mely könyvtárból indítom a fordítást.