Java JDepend未命中周期
我们有一个基于JDepend 2.9.1的JUnit测试,以发现非法的依赖项和周期 今天我们发现JDepend缺少依赖项。在下面的代码中,似乎不考虑B的依赖: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
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是否更完整吗?最新的主服务器支持运行时保留策略。这是在