Pergunta

Ele pode não ser a melhor prática, mas existem maneiras de remover unsused classes a partir de um terceiro arquivos jar.Algo que parece na forma em que minhas aulas estão usando a biblioteca e faz algum tipo de análise de cobertura e, em seguida, cospe outro frasco com todos os intocáveis classes removido.

Obviamente, existem problemas com isso.Especificamente, o cenário de uso eu colocá-lo de que não pode usar todas as aulas o tempo todo.

Mas negligenciar esses problemas, isso pode ser feito, em princípio?

Foi útil?

Solução

Há uma maneira.

O JarJar projeto faz isto, BELOS.O primeiro gol do JarJar projeto é permitir uma incorporar bibliotecas de terceiros em seu próprio frasco, alterando a estrutura do pacote, se necessário.Fazê-lo, podem retirar as classes que não são necessárias.

Confira em http://code.google.com/p/jarjar/.

Aqui está um link sobre redução de jars: http://sixlegs.com/blog/java/jarjar-keep.html

Outras dicas

Existe uma ferramenta Ant chamado classfileset.Especificar a lista de raiz de classes que você sabe que você precisa e, em seguida, o classfileset recursivamente analisa o seu código para encontrar todas as dependências.

Como alternativa, você pode desenvolver um bom conjunto de testes que exerce todas as funções que você precisa e, em seguida, executar os testes sob uma cobertura de teste da ferramenta.A ferramenta irá dizer-lhe quais as classes (e instrução foram realmente utilizados.Isso poderia dar-lhe um mesmo conjunto menor de código do que o que você gostaria de encontrar com a análise estática.

Eu uso ProGuard para este.Além de ser um excelente obfuscator, ele tem um código de encolhimento fase, que pode combinar vários Frascos e, em seguida, a fita não utilizados classes ou membros de classe.Ele faz um excelente trabalho encolhendo.

Em um trabalho anterior, eu usei Java obfuscator que assim como a ofuscação do código, também removido classes e métodos que não estavam sendo utilizados.Se você estava fazendo "de Classe.byName" ou qualquer outro tipo de reflexão coisas que você precisava para dizer o obfuscator porque ele não podia dizer inspecionando o código que classes ou métodos chamados por reflexão.

O problema, claro, é que você não sabe se outras partes da biblioteca de terceiros, são de fazer qualquer reflexão, e tão remoção de um "não utilizado" classe pode fazer com que as coisas quebrar em um obscuro caso que você ainda não testou.

jar é apenas um arquivo zip, então eu acho que você pode.Se você pudesse chegar à fonte, é mais simples.Talvez tente desmontar a classe?

Adicionando a esta pergunta, que pode melhorar o desempenho?Desde que as aulas não usado, não seria o JIT compilado melhorar o tempo de inicialização ou o java automaticamente detectar que durante a compilação para bytecode e não mesmo lidar com o código que não é usado?

Este seria um projeto interessante (alguém já feito?)

Eu presumo que você daria a ferramenta de seu frasco(s) como ponto de partida, e a biblioteca jar para limpar.Ele poderia usar a reflexão para determinar quais as classes de seu frasco(s) de referência diretamente, e que são utilizados indiretamente para baixo da árvore de chamada (isso não é trivial, mas factível).Se ele encontrar qualquer reflexão código em qualquer dos dois lugares, ele deve dar um som muito alto aviso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top