我一直在阅读为Java 9排列的模块化功能 - 即Jigsaw和Penrose项目。我很想知道有没有OSGI经验的人是否认为Java 9将成为曾经使用像Felix和Karaf这样的框架的项目的事实上的运行时?
答案 0 :(得分:1)
如果你仔细观察Jigsaw,你会发现在那个版本中它对应用程序没有用,因为它缺少一些基本功能来使它有用(这是它再次被延迟的一个原因)。请查看示例注释扫描支持。
此外,Jigsaw仅提供一个最小的模块系统,它不仅仅是一个额外的访问级别。 OSGi提供了许多功能,这些功能根本不在Jigsaw的范围内。
答案 1 :(得分:0)
java9中的模块化在编译时解析。 您定义模块及其依赖项。然后编译并将包绑定在一起以获得临时JVM。 使用OSGi(karaf,felix,equinoxe ......),分辨率是动态的,它是在运行时完成的。模块部署(导入)或执行模块时(动态导入)。
两者都不是矛盾的,而是互补的。 人们可以很好地想象一个以java9模块的形式编写的karaf,以获得最小的内核。 OSGi的动态添加被降级到运行时。我认为OSGi的演变必须决定在容器中部署java9模块时要做出的解释。 模块头包含输入/导出信息,但没有版本概念。就像今天捆绑包导入包而没有指定版本一样,它是绑定的最可用版本。
A + JYT