Posso usare WinMerge per confrontare i file * .class?


3

Lavoravo con BeyondCompareed era in grado di confrontare i *.classfile configurandolo per eseguire un decompilatore prima del confronto.

C'è qualcosa del genere per WinMerge? O un plug-in che può farlo invece?

Risposte:


7

Ho passato la giornata a scrivere un plugin DLL per Winmerge per fare questo - non è la cosa più grande del mondo, ma fa il lavoro.

Prende il nome file, lo divide in directory e nome della classe, quindi chiama javap per ogni file di classe. Purtroppo è piuttosto lento (direi che è colpa di javap).

Ho messo la DLL qui:

http://www.locusia.com/winmerge/displayclassfiles.dll

Assolutamente nessuna licenza, garanzia, ecc. Neanche trojan o virii. Cercherò di ripulire la fonte e metterla da qualche parte (probabilmente con le persone del progetto Winmerge).

Crea una directory "MergePlugins" dove si trova il tuo eseguibile winmerge e inserisci la dll. Si attiva automaticamente sui file * .class.

La parte più difficile è stata capire come avviare javap, la programmazione di Windows è semplicemente terribile.

Sarebbe bello se Winmerge confrontasse i file prima di decomprimerli per vedere se sono diversi, risparmierebbe un po 'di tempo. Forse questo può essere realizzato in qualche modo nel plugin, ma come ho già detto, l'ho semplicemente hackerato il più velocemente possibile.

Oh, dovrei menzionare che avrai bisogno di javap sul tuo cammino.

EDIT: il codice sorgente è qui: http://www.locusia.com/winmerge/unpackjavaclassfiles%20source.7z Costruito utilizzando Visual Studio 2005 - Adattato dal plug-in DisplayBinaryFiles che è disponibile con il pacchetto sorgente Winmerge.


Grazie - Ho perso la notifica di questa risposta, l'ho appena vista. Apprezzo molto il tuo sforzo - lo
proverò al

1
per abilitare il diffing automatico (facendo doppio clic), eseguire questa operazione (Plugin> Disimballaggio automatico) - WinMerge 2.14.0
Gary Tsui

@GaryTsui grazie, ma ciò che intendo è che nella visualizzazione elenco (supponi di confrontare un'intera cartella di file di classe) mostrerà i file di classe come diversi, anche se al momento del disimballaggio sono identici. Penso che ciò avvenga perché possono avere differenze binarie (dovute alla ricompilazione, ecc.), Tuttavia le firme del metodo / campo non sono cambiate. Quando si confrontano due API binarie, ad esempio, è necessario controllare manualmente ogni classe diversa, quando si fa doppio clic su di essa si incontrerà "i file sono identici" o simili, anche se sono stati contrassegnati come diversi nell'elenco!
Wayne Uroda,

grande trucco .. mi hai salvato la notte :)
ahmednabil88
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.