包P1和P2有依赖循环,但是P1的类没有使用P2(通过jdepend分析)
一般包依赖问题
如果 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
General package dependency question
Under what circumstances can there be a dependency cycle between packages P1 and P2 if no class and interface of P1 uses P2? I.e. where does the "hidden dependency" come from?
Concrete example with jdepend
jdepend says I have a package dependency between stsimulator
and stsimulator.ststraversal
, but no class or interface of stsimulator
uses any part of stsimulator.ststraversal
, meaning
- jdepend's dependencies-explorer in Eclipse says so, and
- all classes/interfaces of
stsimulator
neither import stsimuator.* nor use the string "ststraversal".
How can that be?
Part of my package dependency cycle as printed by jdepend
--------------------------------------------------
- Package Dependency Cycles:
--------------------------------------------------
stsimulator
|
| stsimulator.ststraversal
|-> stsimulator
stsimulator.sts
|
| stsimulator.interpreter.javacc
|-> stsimulator
| stsimulator.ststraversal
|-> stsimulator
stsimulator.ststraversal
|
| stsimulator
|-> stsimulator.ststraversal
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
同样的事情也发生在我们身上。场景如下:
我们的测试类位于相同的包结构中,但位于不同的源目录中。实际代码和测试代码都被编译到相同的输出目录中(我认为这是 Eclipse 中的默认目录,除非您另外指定)。由于 JDepend 不分析源代码,而是分析编译后的代码,因此我们的测试类意外地在包之间引入了幻像依赖关系。
The same thing happened to us. The scenario was as follows:
We had test classes in the same package structure but in different source directories. Both the actual code and the test code was compiled into the same output directory (this is the default in Eclipse unless you specify otherwise, I think). Since JDepend doesn't analyse the source code but the compiled code, our test classes have accidentally introduced phantom dependencies between packages.