作为模块系统的一部分正在进行的迁移, CORBA和其他的Java EE模块在Java 9更新时将不会包含在默认的类路径中 。这些模块依然能够获取,但是开发者们需要使用特定的命令行指令才能够使用它们。这个变化只会影响到非模块化的、以Java 9为目标系统的应用,因为模块化的应用已经需要详细指出它们依赖的模块。
正如“ 模块系统的情形 ”中解释的那样,模块化在Java 9中的附加功能不会强制开发者直接使用它们,反而,Java 9中提供了一定数量的向后兼容选项。其中一个允许在Java 9中完成传统的、非模块化的代码。其中为了它能够正常工作,非模块化的代码需要被添加至编译器,作为一个特殊的模块,叫做“未命名模块”,它默认显示了所有包含的包并且没有详述的依赖。
不幸的是,未命名模块没有任何明确的依赖关系,这会给模块分解带来很大的挑战。在一个模块化的Java应用中,正在被编译的模块会有一个明确的所需要的依赖关系清单。编译器可以使用这些信息,伴随着依赖关系中的依赖,来计算出一个图表,其中包括所有被编译模块直接或间接需要的所有模块的传递闭包。而未命名模块没有标明任何依赖,所以它不能被用于计算模块图表的根节点。
为了修正这个问题, Java 9将会使用一些默认值作为将代码编译入未命名模块的根模块 。在最新的修改中,这个默认根模块已经从java.se.ee迁移到java.se,这意味着所有的Java EE扩展现在都默认不能使用了。这个修改会帮助预防包含它们自己的Java EE包实现的应用服务器中的冲突。
那些想要迁移至Java 9但是还没有做好重写他们应用每个模块系统的准备的人可以仍然将这些依赖添加回类路径,通过在编译或运行应用时使用命令行指令“-addmods ”。
查看英文原文: Java 9 Will Remove CORBA from Default Classpath
感谢张龙对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们。