通用软件包依赖问题
在什么情况下,如果P1的类和接口都没有使用P2,那么在程序包P1和P2之间会存在一个依赖循环吗?即“隐藏的依赖关系”从何而来?
jdepend的具体例子
jdepend说我在stsimulator
和stsimulator.ststraversal
之间有程序包依赖关系,但是stsimulator
的任何类或接口都不使用stsimulator.ststraversal
的任何部分,这意味着
Eclipse中的jdepend的dependency-explorer就是这样,并且stsimulator
的所有类/接口既不导入stsimuator。*,也不使用字符串“ ststraversal”。
这个怎么可能?
我的软件包依赖关系周期的一部分,由jdepend打印
--------------------------------------------------
- Package Dependency Cycles:
--------------------------------------------------
stsimulator
|
| stsimulator.ststraversal
|-> stsimulator
stsimulator.sts
|
| stsimulator.interpreter.javacc
|-> stsimulator
| stsimulator.ststraversal
|-> stsimulator
stsimulator.ststraversal
|
| stsimulator
|-> stsimulator.ststraversal
最佳答案
同样的事情发生在我们身上。情况如下:
我们在相同的包结构中但在不同的源目录中有测试类。实际代码和测试代码都被编译到相同的输出目录中(我认为这是Eclipse中的默认值,除非您另行指定)。由于JDepend不会分析源代码,而是分析编译后的代码,因此我们的测试类意外地在包之间引入了幻影依赖。