Posso usar o WinMerge para comparar arquivos * .class?


3

Eu costumava trabalhar com BeyondCompare e foi capaz de comparar *.class arquivos, configurando-o para executar um decompilador antes da comparação.

Existe algo assim para WinMerge? Ou um plug-in que pode fazer isso?

Respostas:


7

Eu passei o dia escrevendo um plugin DLL para Winmerge para fazer isso - não é a melhor coisa do mundo, mas faz o trabalho.

Obtém o nome do arquivo, divide-o no diretório e nome da classe e, em seguida, chama o javap para cada arquivo de classe. É um pouco lento, infelizmente (culpa do javap eu diria).

Eu coloquei a DLL aqui:

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

Absolutamente nenhuma licença, garantia, etc. Nenhum trojans ou vírus também. Eu vou dar a volta para limpar a fonte e colocá-la em algum lugar (provavelmente com as pessoas do projeto winmerge).

Crie um diretório "MergePlugins" onde seu executável do winmerge está e coloque a dll nele. É ativado automaticamente em arquivos * .class.

A parte mais difícil foi descobrir como iniciar o javap, a programação do Windows é tão ruim.

Seria bom se o winmerge comparasse os arquivos antes de descompactá-los para ver se eles são diferentes - isso economizaria um pouco de tempo. Talvez isso possa ser feito no plug-in de alguma forma, mas como eu disse, eu acabei de hackear isso o mais rápido que pude.

Oh, devo mencionar que você precisará do javap no seu caminho.

EDIT: código-fonte está aqui: http://www.locusia.com/winmerge/unpackjavaclassfiles%20source.7z Construído usando visual studio 2005 - Adaptado do plugin DisplayBinaryFiles que está disponível com o pacote fonte winmerge.


Obrigado - Eu perdi a notificação sobre esta resposta, eu só vi agora. Eu realmente aprecio o seu esforço - vou testá-lo o mais rápido possível :)
RonK

1
para habilitar o diff automático (ao clicar duas vezes), faça isso (Plugins & gt; Automatic Unpacking) - WinMerge 2.14.0
Gary Tsui

@GaryTsui agradece, mas o que eu quero dizer é que na exibição de lista (digamos que você compara uma pasta inteira de arquivos de classe) ele mostrará os arquivos de classe como diferentes, mesmo que ao serem descompactados eles sejam idênticos. Eu acho que isso acontece porque eles podem ter diferenças binárias (devido a recompilação etc), no entanto, as assinaturas de método / campo não foram alteradas. Ao comparar duas APIs binárias, por exemplo, você tem que verificar cada classe diferente manualmente, quando você clica duas vezes nela, você encontrará "os arquivos são idênticos" ou similares, mesmo que eles tenham sido marcados como diferentes na lista!
Wayne Uroda

grande truque .. você salva minha noite :)
ahmednabil88
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.