使用javac --patch-module编译多模块代码时遇模块数量超限错误求助
解决javac --patch-module多模块报错问题
你遇到的这个“too many patched modules”错误,本质是因为在单次javac调用中,当你尝试同时patch多个存在交叉引用的模块时,编译器无法正确处理模块间的依赖顺序。下面给你两种可行的解决办法:
方法一:分阶段编译(适用于所有支持模块的JDK版本)
既然Object.java、FileHandler.java和MyClass.java存在交叉引用,我们可以按照依赖顺序分步骤编译:
先编译java.base模块的修改类
因为java.logging模块可能依赖java.base的修改,所以先单独编译Object.java:cd src javac --patch-module java.base=java.base java.base/java/lang/Object.java再编译java.logging模块的修改类
此时需要同时指定patch java.base(确保FileHandler能引用到修改后的Object)和java.logging:javac --patch-module java.base=java.base --patch-module java.logging=java.logging java.logging/java/util/logging/FileHandler.java最后编译自定义类MyClass.java
根据MyClass的依赖,带上需要patch的模块参数:javac --patch-module java.base=java.base --patch-module java.logging=java.logging com/example/MyClass.java
方法二:合并--patch-module参数(适用于JDK 11及以上版本)
从JDK 11开始,javac允许在单个--patch-module参数中用逗号分隔多个模块=路径对,这样可以避免分阶段编译的麻烦:
cd src javac --patch-module java.base=java.base,java.logging=java.logging $(find . -name *.java)
这个写法会告诉编译器同时patch两个模块,并且能正确处理它们之间的交叉引用。
内容的提问来源于stack exchange,提问作者Gayan Weerakutti
相关产品推荐
相关产品推荐

