关于 Java module 的讨论 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Dlin
V2EX    Java

关于 Java module 的讨论

  •  
  •   Dlin 2023-10-08 16:41:43 +08:00 1978 次点击
    这是一个创建于 737 天前的主题,其中的信息可能已经有所发展或是发生改变。
    之前一直没有用起来 module 这个特性,就算项目升级到 11 或 17,也是顺利过渡(未添加 module-info.java )但是最近报错未命名模块不能访问 java.base 模块下的未 open 的内容,所以今天学习了一下 module 这个特性。

    因此也产生了疑惑。情景如下:
    我建立了两个项目,项目 A 创建了 module-info.java 导出了但未进行 open com.txcf,包下有一个类 AA ,其中有一个私有变量 a ;


    另一个项目 B 实验情况如下:
    第一次创建了 modul-info.java 我试图通过反射访问 A 模块 AA 类的私有变量 a,报错:InaccessibleObjectException ,这是预期发生的情况。
    第二次我删除了 module-info.java ,该模块变为未命名模块,我试图通过反射访问 AA 类的私有变量 a,却能访问了。

    奇怪的是我在第一次和第二次的情况中都不能访问 java.util 中的类的私有成员变量,比如 ArrayList 中的 size 变量。

    我在通过 debug 时发现,第一次的情况,调用类和被调用类的 class 获取到的 Module 是两个不同的模块(这也符合预期情况),但是第二次的情况获取的 Module 却是相同的 Module 实例(都是未命名模块)

    问题:
    1 、非 jdk 官方模块在被未命名模块导入时,被导入模块无论是否命名都会直接导入到未命名模块吗?
    2 、问题 1 成立(实验似乎也如此)的话,为何 jdk 官方只保护自己的模块,不保护第三方已命名模块呢?或者说是可以有参数开启保护的呢?
    3 条回复    2023-10-08 22:07:48 +08:00
    hengyunabc
        1
    hengyunabc  
       2023-10-08 18:41:23 +08:00   1
    java module 不太可能被太规模应用在业务系统里。它设计之初就是为了 jdk 本身拆分的,它也比较好的完成了这个任务。后面出现的 jlink, jpackage 尽管好像没有太规模应用起来,但应用可以很轻松打包出一个自己的轻量化 jdk 了。

    比如这个: https://github.com/hengyunabc/lite-jdk

    为了兼容,不同版本的 jdk 对于 unnamed module 的访问控制不一样,是慢慢收紧的。jdk 9/11 ,应该是 unnamed module 还可以反射访问 jdk 内部的模块。只会打印出提示信息。

    在 jdk 17 之后,反射访问 jdk 内部模块是直接非法的。

    这个工具可以运行时动态打开 jdk 的 module ,可以减少一些 export/open 的 jvm 参数配置: https://github.com/hengyunabc/jpms-tools
    infoscope
        2
    infoscope  
       2023-10-08 21:24:30 +08:00 via iPhone
    和当年用过的 osgi 有点像
    Dlin
        3
    Dlin  
    OP
       2023-10-08 22:07:48 +08:00 via Android
    @hengyunabc 好的,感谢大佬的解答,就说怎么那么 github 主页那么眼熟,原来是 arthas 的维护者
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2980 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 14:18 PVG 22:18 LAX 07:18 JFK 10:18
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86