2011-08-30 4 views
1

불법적 인 종속성과주기를 찾기 위해 JDepend 2.9.1을 기반으로 한 JUnit 테스트를 실시했습니다.JDepend misses Cycles

오늘 우리는 JDepend에 의존성이 없음을 발견했습니다. 다음의 코드 조각에서 B에 따라 고려하지 않는 것 :

public class A { 
    @SomeAnotation(value = B.class) 
    public String someMethod() { 
     ... 
    } 
} 

우리의 시험은 다음과 같습니다

private JDepend setupJDepend() { 
    JDepend jdepend = null; 
    try { 
     jdepend = new JDepend(); 
     jdepend.addDirectory("target/classes"); 
     jdepend.addDirectory("target/test-classes"); 
    } catch (final IOException ioException) { 
     fail("An IOException occured: " + ioException.getMessage()); 
    } 
    jdepend.analyzeInnerClasses(true); 
    return jdepend; 
} 

@Test 
public final void testNoCyclesOnPackageLevel() { 
    final JDepend jdepend = setupJDepend(); 
    final Collection<?> packages = analyzeDependencies(); 

    assertTrue(packages.size() > 0); 

    assertFalse("The code contains dependency cycles on package level!", 
      jdepend.containsCycles()); 

    if (ignorePackageCycle) { 
     return; 
    } 

    java.util.List<String> packagesWithCycle = new ArrayList<String>(); 
    for (Object pObject : packages) { 
     JavaPackage javaPackage = (JavaPackage) pObject; 
     if (javaPackage.containsCycle()) { 
      packagesWithCycle.add(javaPackage.getName()); 
     } 
    } 
    assertTrue(packagesWithCycle.toString(), packagesWithCycle.isEmpty()); 
} 

JDepend4Eclipse 플러그인 종속성을보고 그 결과 사이클을보고합니다.

이것은 버그입니까? 해결 방법이 있습니까? 우리가 뭔가 잘못하고있는거야?

관련 참고 사항 : jdepend.containsCycles()는 항상 false를 반환합니다.

답변

2

누락 된 기능입니다.

@SomeAnotation으로 선언 된 @Retention(SOURCE)의 경우 컴파일 된 클래스 파일에서 B을 찾을 수 없습니다.

다른 정책의 경우 주석은 클래스 파일에 포함되지만 JDepend의 ClassFileParser은 어떤 종류의 주석도 지원하지 않습니다. 이것은 지금까지 누락 된 기능입니다.

EDIT : 소스 코드를 체크인하고 Java 5 주석을 지원하며 Eclipse 플러그인에서 사용됩니다. 아마 2.9.1은 이것을 근거로하지 않을 수도 있습니다. JDepend의 출시 노트 및 출시 날짜를 찾을 수 없습니다. 이 강령은 2010-05-19 년에 확인되었습니다. "최신"릴리스는 2008 년 이후 인 것 같습니다.

+0

그러나 JDepend4Eclipse는 어떻게 종속성을 찾습니까? DependencyFinder가 더 완벽한 지 알고 있습니까? –

+0

최신 마스터는 RUNTIME 보존 정책을 지원합니다. https://github.com/clarkware/jdepend/commit/e8271a2b053c6e1857ba54131d36e2316a108f89에서 추가되었습니다. –

관련 문제