it-swarm-pt.tech

Java detecção do ciclo de pacotes: como encontro as classes específicas envolvidas?

Que ferramenta você recomendaria para detectar dependências cíclicas do pacote Java , sabendo que o objetivo é listar explicitamente as classes específicas envolvidas na detecção ' ciclo entre pacotes '?

Eu sei sobre classycle e JDepend , mas ambos falham ao listar as classes envolvidas em uma dependência de pacote cíclico. Metrics possui uma representação gráfica interessante de ciclos, mas é novamente limitada a pacotes e bastante difícil de ler em algum momento.

Estou cansado de receber:

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

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


Riiight ... Hora de proclamar os resultados:

@ l7010.de: Obrigado pelo esforço. Eu votarei em você (quando tiver representante suficiente), especialmente para a resposta 'CAP' ... mas o CAP está morto na água e não é mais compatível com o meu Eclipse 3.4. O resto é comercial e eu procuro apenas por freeware.

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

@izb como um 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 no versão 0.8.7 de passagem (procure por ' Detector New Style para encontrar dependências circulares entre as classes') e não consigo para testá-lo. Atualização: Funciona agora, e eu tinha um arquivo de configuração findbugs antigo no qual essa opção não estava ativada. Eu ainda gosto CAD embora;)

A RESPOSTA é ... veja minha (segunda) resposta abaixo

38
VonC

O Findbugs pode detectar dependências de classe circular e também possui um plug-in do Eclipse.

http://findbugs.sourceforge.net/

14
izb

Bem ... após o teste DepFinder apresentado acima , verifica-se 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 RESPOSTA REAL REAL é: CDA - Class Dependency Analyzer

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

Você precisa criar um workset no qual insira apenas o diretório de suas classes (.class) (não é necessário ter um caminho de classe completo)
A opção "Detectar dependências circulares - ALT-C"funciona como propaganda e não leva 100% da CPU por horas para analisar minhas 468 classes.
Nota: para atualizar um espaço de trabalho, é necessário abri-lo novamente (!), Para ativar uma nova varredura de suas classes.

screenshot

25
VonC

Highwheel detecta os 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.).

Também divide grandes ciclos em seus subelementos, que podem ser entendidos/enfrentados individualmente.

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

4
henry

Há também Structure101 que deve fazer isso.

4
squiddle

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

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

4
Stijn Van Bael

Uma primeira resposta possível é ... não bonita. Mas começa a fazer o que estou procurando (uma solução melhor é apresentada abaixo ).

Localizador de Dependências ! Faça o download , descompacte-o.

Não é o projeto mais moderno ou ativo de todos os tempos, mas se você editar [Localizador de Dependências] /bin/DependencyFinder.bat, inclua seu caminho para DEFAULT_DEPENDENCYFINDER_HOME, defina um Java_HOME, poderá iniciá-lo.

Então você clica no botão 'Extrair' (CTRL-E - primeiro botão), insira o caminho das aulas e deixe-o digitalizar.

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

  • Selecione apenas 'classes' no lado esquerdo ('elementos de programação').
  • Selecione apenas 'classes' no lado direito ('fechamentos').
  • 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 - CtrlA).

E aqui está você.

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

Estou pronto para testar outras sugestões.

1
VonC

E você pode usar a ferramenta de código aberto CAP , que é um plug-in do Eclipse.

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

1
squiddle

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

0
squiddle

Existem algumas ferramentas comerciais: Structure101 e Lattix que podem ser usadas para essa finalidade.

0
daniel6651