Como posso comparar dois arquivos .jar? Ambos compilaram arquivos .class.
Eu quero a diferença em termos de mudanças de método, etc.
java
jar
comparison
diff
Kunal
fonte
fonte
Se você selecionar dois arquivos em IntellijIdea e pressionar
Ctrl + D
, será mostrado o diff. Eu uso o Ultimate e não sei se vai funcionar com a edição Community .fonte
fonte
jar
para extrair o conteúdo, em vez de renomear o arquivo e usá-lopkunzip
.)javap -c
para mantê-lo em bytecode (especialmente se por "alterações de método" o OP significa alterações na assinatura de um método).diff
ing dejavap
oujad
saída fora de sintonia.Eu uso para ZipDiff lib (tem Java e API Ant).
fonte
Extraia cada jar para seu próprio diretório usando o comando jar com os parâmetros xvf. ou seja,
jar xvf myjar.jar
para cada frasco.Em seguida, use o comando UNIX
diff
para comparar os dois diretórios. Isso mostrará as diferenças nos diretórios. Você pode usardiff -r dir1 dir2
dois recurse e mostrar as diferenças nos arquivos de texto em cada diretório (.xml, .properties, etc).Isso também mostrará se os arquivos de classe binários são diferentes. Para realmente comparar os arquivos de classe, você terá que descompilá-los conforme observado por outros.
fonte
Aqui está meu script para fazer o processo descrito por sje397:
Posso executá-lo no Windows usando o GIT para Windows. Basta abrir um prompt de comando. Execute o bash e execute o script a partir daí.
fonte
diff -r ${EXT_DIR1} ${EXT_DIR2}
ou${DIFF} ${EXT_DIR1} ${EXT_DIR2}
(se reutilizar sua variável declarada). Para quem está no cygwin, o script quase funcionou para mim, exceto duas coisas que mudei: 1) Tive que usar o javap integrado em vez do jad, porque não consigo baixar o jad (enterp. Firewall ... ); 2) comojar xf
does't entender caminhos como/cygwin/c/rest/of/path
o que é retornado porpwd
no cygwin, eu tive que convertê-lo emc:/rest/of/path
:JAR_DIR=${PWD}
,JAR_DIR=${JAR_DIR#*/cygdrive/c}
,JAR_DIR="c:$JAR_DIR"
jad
? Não tem esse binário disponível no PATHfoo/bar/toto.jar
), você precisa adicionar o-p
argumento ao comando mkdirNo Linux / CygWin, um script útil que uso às vezes é:
fonte
Use o Java Decompiler para transformar o arquivo jar em arquivo de código-fonte e, a seguir, use o WinMerge para realizar a comparação.
Você deve consultar o detentor dos direitos autorais do código-fonte, para ver se está correto fazer isso.
fonte
use o descompilador java e descompile todos os arquivos .class e salve todos os arquivos como a estrutura do projeto.
em seguida, use o meld diff viewer e compare como pastas.
fonte
Aqui está uma ferramenta aparentemente gratuita http://www.extradata.com/products/jarc/
fonte
Tente http://www.osjava.org/jardiff/ - a ferramenta é antiga e a lista de dependências é grande. Pela documentação, parece que vale a pena tentar.
fonte