JDepend misses Cycles



我们有一个基于JDepend 2.9.1的JUnit测试,以便发现非法的依赖和循环。

今天我们发现JDepend缺少依赖项。下面这段代码似乎没有考虑到A依赖于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插件查看依赖项并报告生成的周期。

这是Bug吗?是否有解决方法?我们做错了什么吗?

与此相关的注意:jdepend.containsCycles()总是返回false。

这是一个缺失的功能!

对于声明为@SomeAnotation@Retention(SOURCE),没有工具可以在编译的类文件中找到B

对于其他策略,注释包含在类文件中,但是JDepend的ClassFileParser不支持任何类型的注释,这是到目前为止缺少的功能。

编辑:源代码签入,支持java 5注释,并在eclipse插件中使用。也许2.9.1不是基于此。没有找到JDepend的发布说明和发布日期。代码已于2010-05-19检查。"最新"版本似乎是2008年的。

相关内容

  • 没有找到相关文章