我们有一个基于JDepend 2.9.1的JUnit测试,以发现非法的依赖和循环。
今天我们发现JDepend缺少依赖项。在下面这段代码中,它似乎没有考虑依赖于B的A:
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。
发布于 2011-08-30 22:08:52
这是一个缺失的特性!
对于声明为@SomeAnotation的@Retention(SOURCE),没有任何工具可以在编译后的类文件中找到B。
对于其他策略,注释包含在类文件中,但JDepend的ClassFileParser不支持任何类型的注释,这是目前为止缺少的功能。
编辑:签入的源代码支持java5注解,并在eclipse插件中使用。也许2.9.1版本不是基于这个。未找到JDepend的发行说明及其发行日期。本规范已在2010-05-19进行了检查。“最新”版本似乎是2008年的。
https://stackoverflow.com/questions/7241685
复制相似问题