如何将模块声明注入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
失败,因为包package1
和package2
不存在:
> javac module-info.java module-info.java:4: error: package is empty or does not exist: package1
当然,我可以在其中创建带有虚拟类的目录package1
和package2
,但是有更好的方法吗?
是的,这可以通过--patch-module
选项实现。 此选项最常用于运行时,但它也适用于编译时:
javac --patch-module = module-info.java
或者,要编译生成的module-info.java
您还需要将JAR的内容提取到目录中。
然后编译module-info.java
,并将输出目录(-d)设置为解压缩内容的目录。
致谢: – 艾伦