1

我们有一个基于 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 插件查看依赖关系并报告生成的循环。

这是一个错误吗?有解决方法吗?我们做错了什么吗?

在相关说明中: jdepend.containsCycles() 始终返回 false。

4

1 回答 1

2

这是一个缺失的功能!

对于已@Retention(SOURCE)声明的 ,在编译的类文件@SomeAnotation中找不到任何工具。B

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

编辑:签入的源代码,支持 java 5 注释并在 eclipse 插件中使用。也许2.9.1不是基于此。未找到 JDepend 的发行说明及其发行日期。该代码已于 2010-05-19 进行检查。“最新”版本似乎来自 2008 年。

于 2011-08-30T14:08:51.703 回答