it-swarm-ko.tech

Java 패키지주기 감지 : 관련된 특정 클래스를 어떻게 찾습니까?

목표가 감지 된 '에 관련된 특정 클래스를 명시 적으로 나열하는 것임을 알고 있으므로 자바 패키지 순환 종속성 을 감지하기 위해 권장하는 도구는 무엇입니까? 전체 패키지주기 '?

classycleJDepend 에 대해 알고 있지만 둘 다 순환 패키지 종속성에 관련된 클래스를 나열하지 못합니다. Metrics 주기에 대한 흥미로운 그래픽 표현이 있지만 다시 패키지로 제한되며 언젠가는 읽기가 매우 어렵습니다.

나는 다음을 얻기 위해 피곤해지고 있습니다.

"3 개의 패키지간에 패키지주기 종속성이 있습니다
각 수업에 xxx 개의 수업이 있습니다
올바른 수업을 찾아서이주기를 깨는 행운을 빕니다 "

주기가 감지 된 이유를 실제로 설명하기 위해 추가 단계를 수행하는 도구 (예 : '관련 클래스 나열')를 알고 있습니까?


Riiight ... 결과를 선언 할 시간 :

@ l7010.de : 노력해 주셔서 감사합니다. 특히 'CAP'답변에 대해 투표 할 것입니다 (충분한 담당자가있을 때).하지만 CAP는 물속에서 죽었고 더 이상 Eclipse 3.4와 호환되지 않습니다. 나머지는 상업용이며 프리웨어 만 찾습니다.

@ daniel6651 : 감사합니다.하지만 말했듯이 프리웨어 만 사용합니다 (처음에 언급하지 않아서 죄송합니다).

@izb는 findbugs의 빈번한 사용자로 (현재 최신 1.3.5 사용) 귀하의 답변을 수락하기 위해 한 번의 클릭입니다.주기를 감지하기 위해 findbug를 활성화하는 데 어떤 옵션이 있는지 설명해 주시면됩니다. 이 기능은 .8.7 버전 통과 ( '클래스 간의 순환 종속성을 찾으려면 새 스타일 감지기를 찾으십시오')에서만 언급되며 그것을 테스트합니다. 업데이트 : 이제 작동하며 해당 옵션이 활성화되지 않은 오래된 findbugs 구성 파일이 있습니다. 나는 여전히 CAD 그래도;)

대답은 ... 참조 아래 내 자신의 (두 번째) 답변

38
VonC

Findbugs는 순환 클래스 종속성을 감지 할 수 있으며 Eclipse 플러그인도 있습니다.

http://findbugs.sourceforge.net/

14
izb

글쎄 ... 테스트 후 DepFinder가 위에 제시됨 , 간단한 종속성을 빠르게 감지하는 데 적합하지만 클래스 수에 따라 확장되지 않습니다 ...

따라서 실제 실제 답변은 다음과 같습니다. CDA-클래스 종속성 분석기

빠르고 최신이며 사용하기 쉬우 며 클래스 및 순환 종속성의 그래픽 표현을 제공합니다. 꿈이 이루어진다;)

클래스의 디렉토리 (.class) 만 입력하는 작업 세트를 작성해야합니다 (전체 클래스 경로가 필요 없음).
옵션 "순환 종속성 감지- ALT-C"는 광고로 작동하며 468 클래스를 분석하는 데 몇 시간 동안 CPU의 100 %를 차지하지 않습니다.
참고 : 작업 영역을 새로 고치려면 클래스의 새 스캔을 트리거하기 위해 다시 열어야합니다 (!).

screenshot

25
VonC

Highwheel 클래스 및 패키지주기를 감지하고 관계 유형 (상속, 구성, 메서드 서명의 일부 등)을 나타내는 클래스/메서드/필드 수준까지 종속성 소스를보고합니다.

또한 큰주기를 개별적으로 이해/해결할 수있는 하위 요소로 나눕니다.

출력은 최신 브라우저가 필요한 SVG 콘텐츠가 포함 된 HTML입니다.

4
henry

이 작업을 수행해야하는 Structure101 도 있습니다.

4
squiddle

Sonar 를 사용하여 패키지주기를 감지합니다. 의존성에 대한 Nice 그래프를 그리고 어떤 것이 잘못된 방향으로 가는지 보여줍니다. 종속성이 사용되는 소스로 이동할 수도 있습니다.

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

4
Stijn Van Bael

첫 번째 대답은 ... 예쁘지 않다는 것입니다. 그러나 그것은 내가 추구하는 일을 시작합니다 (더 나은 해결책은 아래에 제시됨 ).

종속성 찾기 ! 다운로드 , 압축을 풉니 다.

지금까지 가장 현대적이거나 활발한 프로젝트는 아니지만 [Dependency Finder] /bin/DependencyFinder.bat를 편집하면 DEFAULT_DEPENDENCYFINDER_HOME의 경로를 추가하고 Java_HOME을 설정하면 실행할 수 있습니다.

그런 다음 '추출'버튼 (CTRL-E-첫 번째 버튼)을 클릭하고 클래스 경로를 입력 한 다음 스캔 할 수 있습니다.

까다로운 부분은 결과의 세부 수준에 휩싸이지 않도록 '프로그래밍 요소'및 '종료'항목의 올바른 세트를 정확히 클릭하는 것입니다.

  • 왼쪽에서 '클래스'만 선택하십시오 ( '프로그래밍 요소').
  • 오른쪽에서 '수업'만 선택하십시오 ( '종료').
  • "/javax?./,/org./,/Sun./"을 제외 패턴으로 추가합니다 (프로그래밍 요소와 클로저 모두에 대해).
  • 바퀴를 클릭합니다 (마지막 버튼-모두 계산- CtrlA).

그리고 여기 있습니다.

'<->'를 볼 때마다 Nice 주기적 종속성 이 있습니다. ( '클로저'쪽에서 '기능'을 선택하면 어떤 기능이주기를 트리거하는지 알 수 있습니다. 대단합니다.)

다른 제안을 테스트 할 준비가되었습니다.

1
VonC

그리고 Eclipse 플러그인 인 오픈 소스 도구 CAP 를 사용할 수 있습니다.

CAP에는 클래스에 대한 라인을 표시하는 그래픽 패키지보기가 있으므로 클릭 몇 번 (원의 크기에 따라 다름) 후에 범인을 찾을 수 있습니다.

1
squiddle

이를 수행하는 한 가지 도구는 소프트웨어 단층 촬영 입니다. 그것은 상업적이고 UI는 짜증납니다 : o

0
squiddle

이러한 목적으로 사용할 수있는 몇 가지 상용 도구가 있습니다. Structure101 및 Lattix.

0
daniel6651