本文主要研究下迁移到java9的一些注意事项。通过在module-path去动态添加实现模块实现解耦。module-info.java不支持声明版本号,但是创建jar包的时候,可以通过--module-version设置。module-info.java的exports声明package只是允许该package直接所属的类允许访问其public元素,并不允许反射调用非public元素。反射在模块系统里头需要特殊声明才允许使用,这样就导致很多使用反射的类库诸如spring,需要额外配置才能迁移到java9。因此open整个module可能更省事一点,但也属于比较粗暴的做法。另外由于split packages问题,单元测试类的包名不能跟目标模块包名重复。原来maven工程那种test可以分两步走迁移到java9,首先是先不模块化,只先跑在jdk9上;然后再模块化。

java9区分opens与exports

java9区分opens与exports

java9区分opens与exports