首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java 9中是否可以使用循环模块依赖项?

在Java 9中是否可以使用循环模块依赖项?
EN

Stack Overflow用户
提问于 2016-02-28 22:18:03
回答 2查看 1.6K关注 0票数 19

在Java 9中,循环模块是否被允许?若否,原因为何?

代码语言:javascript
复制
module com.foo.bar {
    requires com.foo.baz;
    exports com.foo.bar.fizz;
}

module com.foo.baz {
    requires com.foo.bar;
    exports com.foo.baz.buzz;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-29 07:19:02

不是的。

文档

有趣的是,模块系统的状态拼图快速启动指南都没有解决这个问题。其中一个来源(由安迪发现)是亚历克斯·巴克利( Alex )的一篇JavaOne演讲(参见他解释,这里)。最近的一个是未决问题清单,它显式地提到了循环相依

当模块图最初在编译时、链接时和运行时被解析时,当前的草案不允许循环。如果为自动模块添加了可读性边缘,或者通过反射,则在运行时可能会出现循环。..。然而,这一约束并不是一项记录在案的要求。

对齐

循环依赖是不好的,mkay。;)

当两个实体(方法、类、模块、项目、.)出现时,它们就会出现。协作,但没有充分解耦。对于用户和维护人员来说,这种耦合意味着他们不能在不考虑另一个因素的情况下使用或改进其中一个。但这正是模块化正在努力实现的好处。

来自上述问题清单,链接如下:

在解析过程中拒绝循环的理由是,它使模块图更易于推理,简化了模块系统本身,并且,从哲学上讲,任何涉及循环的模块在逻辑上都是一个模块,因此首先应该将它们定义为模块。

实验

我创建了一个包含两个循环的小基于GitHub的演示项目 (:两个->一个-> 2;三元:三个->两个->一个-> 3)。如快速启动指南所示,尝试多模块编译的结果如下:

代码语言:javascript
复制
./compile.sh
 > creating clean directories
 > compiling and packaging cycle "pair"
src/org.codefx.demo.cyclic.pair.one/module-info.java:2: error: cyclic dependence involving org.codefx.demo.cyclic.pair.two
        requires org.codefx.demo.cyclic.pair.two;
                                            ^
1 error
 > compiling and packaging cycle "triple"
src/org.codefx.demo.cyclic.triple.three/module-info.java:2: error: cyclic dependence involving org.codefx.demo.cyclic.triple.two
        requires org.codefx.demo.cyclic.triple.two;
                                              ^
1 error

因此,您甚至无法编译模块,更不用说在配置中使用它们了。

票数 21
EN

Stack Overflow用户

发布于 2017-07-20 08:28:24

除非模块是自动模块,否则不会出现问题。只允许传递依赖项,和传递依赖项从不循环。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35688995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档