Detecção do ciclo de pacote Java:como encontro as classes específicas envolvidas?[fechado]

StackOverflow https://stackoverflow.com/questions/62276

Pergunta

Qual ferramenta você recomendaria para detectar Dependências cíclicas do pacote Java, saber que o objetivo é listar explicitamente as classes específicas envolvidas no 'ciclo entre pacotes' detectado?

Eu sei sobre clássico e JDepend, mas ambos não conseguem listar as classes envolvidas em uma dependência cíclica de pacote. Métricas tem uma representação gráfica interessante de ciclos, mas é novamente limitada a pacotes e às vezes é bastante difícil de ler.

Estou ficando cansado de pegar um:

"você tem uma dependência do ciclo de pacotes entre esses 3 pacotes
você tem xxx aulas em cada
boa sorte para encontrar as aulas certas e quebrar esse ciclo "

Você conhece alguma ferramenta que dê um passo extra para realmente explicar por que o ciclo foi detectado (ou seja,'listar as classes envolvidas')?


Certo...Hora de proclamar os resultados:

@l7010.de:Obrigado pelo esforço.Vou votar em você (quando tiver representantes suficientes), especialmente para a resposta 'CAP'...mas o CAP está morto e não é mais compatível com meu Eclipse 3.4.O resto é comercial e procuro apenas freeware.

@daniel6651:Obrigado, mas, como disse, apenas freeware (desculpe não ter mencionado isso em primeiro lugar).

@izb como usuário frequente de findbugs (usando a versão 1.3.5 mais recente no momento), estou a um clique de distância para aceitar sua resposta...se você pudesse me explicar qual opção existe para ativar o findbug para detectar qualquer ciclo.Esse recurso é mencionado apenas para o Versão 0.8.7 de passagem (procurar 'Detector de novo estilo para encontrar dependências circulares entre classes'), e não consigo testá-lo.Atualizar:Funciona agora e eu tinha um arquivo de configuração antigo do findbugs no qual essa opção não estava ativada.eu ainda gosto cafajeste no entanto ;)

A resposta é...ver minha própria (segunda) resposta abaixo

Foi útil?

Solução

Findbugs pode detectar dependências de classe circular e também possui um plugin Eclipse.

http://findbugs.sourceforge.net/

Outras dicas

Bem...depois do teste DepFinder apresentado acima, acontece que é ótimo para uma detecção rápida de dependências simples, mas não se adapta bem ao número de classes...

Portanto, a REAL RESPOSTA é:CDA - Analisador de Dependência de Classe

É rápido, atualizado, fácil de usar e oferece representação gráfica de classes e suas dependências circulares.Um sonho tornado realidade ;)

Você tem que criar um workset no qual você insere apenas o diretório de suas classes (.class) (não é necessário ter um classpath completo)
A opção "Detectar dependências circulares - Alt.-C"funciona como anúncio e não ocupa 100% da CPU por horas para analisar minhas 468 aulas.
Observação:para atualizar um espaço de trabalho, você precisa abri-lo novamente(!), para acionar uma nova varredura de suas classes.

screenshot

Nós usamos Sonar para detectar ciclos de pacotes.Ele desenha um belo gráfico das dependências e mostra quais delas vão na direção errada.Você pode até navegar até a fonte onde a dependência é usada.

Ver http://www.sonarsource.org/fight-back-design-erosion-by-breaking-cycles-with-sonar/

Há também Estrutura101 que deveria fazer isso.

Roda alta detecta ciclos de classe e pacote e relata a origem das dependências até o nível de classe/método/campo, indicando o tipo de relacionamento (herança, composição, parte de uma assinatura de método, etc.).

Ele também divide grandes ciclos em seus subelementos que podem ser compreendidos/abordados individualmente.

A saída é HTML com conteúdo SVG incorporado que requer um navegador moderno.

E você pode usar a ferramenta de código aberto BONÉ que é um plugin do Eclipse.

O CAP possui uma visualização gráfica do pacote que mostra as linhas das classes, então após alguns cliques (dependendo do tamanho do círculo) você encontrará o culpado.

Uma primeira resposta possível é...feio.Mas começa a fazer o que estou depois (uma solução melhor é apresentado abaixo).

Localizador de Dependências! Baixe, descompacte-o.

Não é o projeto mais moderno ou ativo de todos os tempos, mas se você editar [Dependency Finder]/bin/DependencyFinder.bat, adicionar seu caminho para DEFAULT_DEPENDENCYFINDER_HOME, definir um JAVA_HOME, você poderá iniciá-lo.

Em seguida, você clica no botão 'Extrair' (CTRL-E - primeiro botão), insere o caminho da sua aula e deixa-o digitalizar.

A parte complicada é clicar exatamente no conjunto certo de itens de 'elementos de programação' e 'fechamentos', para não ser sobrecarregado pelo nível de detalhes do resultado.

  • Selecione apenas ‘classes’ no lado esquerdo (“elementos de programação”).
  • Selecione apenas 'classes' no lado direito ('fechamento').
  • Adicione "/javax?./,/org./,/sun./" como padrão de exclusão (para elementos de programação e fechamentos).
  • Clique nas rodas (último botão - Calcular tudo - Ctrl + A).

E aqui está.

Sempre que você vê '<->', você tem um bom dependência cíclica.(Se você selecionar 'recursos' no lado do 'fechamento', poderá até saber qual função aciona o ciclo - incrível.)

Estou pronto para testar quaisquer outras sugestões.

Existem algumas ferramentas comerciais:Structure101 & Lattix que pode ser usado para esta finalidade.

Uma ferramenta que faz isso é o software tomógrafo.É comercial e a interface do usuário é uma droga: o

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