Java JDepend未命中周期

Java JDepend未命中周期,java,dependencies,jdepend,Java,Dependencies,Jdepend,我们有一个基于JDepend 2.9.1的JUnit测试,以发现非法的依赖项和周期 今天我们发现JDepend缺少依赖项。在下面的代码中,似乎不考虑B的依赖: public class A { @SomeAnotation(value = B.class) public String someMethod() { ... } } 我们的测试如下所示: private JDepend setupJDepend() { JDepend jdepend

我们有一个基于JDepend 2.9.1的JUnit测试,以发现非法的依赖项和周期

今天我们发现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());
}
private JDepend setupJDepend(){
JDepend JDepend=null;
试一试{
jdepend=新的jdepend();
addDirectory(“目标/类”);
addDirectory(“目标/测试类”);
}捕获(最终IOException IOException){
失败(“发生IOException:+IOException.getMessage());
}
analyzeInnerClass(true);
返回jdepend;
}
@试验
公共最终无效测试NoCyclesOnPackageLevel(){
final JDepend JDepend=setupJDepend();
最终收集包=analyzeDependencies();
assertTrue(packages.size()>0);
assertFalse(“代码包含包级别的依赖循环!”,
containsCycles());
if(忽略包装周期){
返回;
}
java.util.List packagesWithCycle=new ArrayList();
对于(对象对象:包){
JavaPackage=(JavaPackage)pObject;
if(javaPackage.containsCycle()){
packagesWithCycle.add(javaPackage.getName());
}
}
assertTrue(PackageWithCycle.toString(),PackageWithCycle.isEmpty());
}
JDepend4Eclipse插件可以看到依赖关系并报告结果周期

这是虫子吗?有解决办法吗?我们做错什么了吗


请注意:jdepend.containsCycles()总是返回false。

这是一个缺少的特性

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

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


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

但是JDepend4Eclipse如何找到依赖关系?您知道DependencyFinder是否更完整吗?最新的主服务器支持运行时保留策略。这是在