如何将模块声明注入JAR?

假设我有一些库lib.jar ,我没有源代码(或者它是用一些不熟悉模块的非Java语言编写的)。 lib.jar没有module-info.class ,我不想将它用作自动模块,所以我想将module-info.class注入其中。

我首先使用以下命令生成module-info.java

 jdeps --generate-module-info . lib.jar 

假设这产生了类似的东西:

 module lib { exports package1; exports package2; } 

然后我尝试编译它但javac失败,因为包package1package2不存在:

 > javac module-info.java module-info.java:4: error: package is empty or does not exist: package1 

当然,我可以在其中创建带有虚拟类的目录package1package2 ,但是有更好的方法吗?

是的,这可以通过--patch-module选项实现。 此选项最常用于运行时,但它也适用于编译时:

 javac --patch-module = module-info.java 

或者,要编译生成的module-info.java您还需要将JAR的内容提取到目录中。

然后编译module-info.java ,并将输出目录(-d)设置为解压缩内容的目录。

致谢: – 艾伦