如何将模块声明注入JAR?

Zhe*_*lov 13 java java-9 java-module module-info

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

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

jdeps --generate-module-info . lib.jar
Run Code Online (Sandbox Code Playgroud)

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

module lib {
    exports package1;
    exports package2;
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试编译它但javac失败因为包package1而且package2不存在:

> javac module-info.java
module-info.java:4: error: package is empty or does not exist: package1
Run Code Online (Sandbox Code Playgroud)

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

Zhe*_*lov 14

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

javac --patch-module <module name>=<path to jar> module-info.java
Run Code Online (Sandbox Code Playgroud)

  • 对于任何试图用生成的模块信息更新遗留JAR的人来说,这个命令序列就是我的工作:`jdeps --generate-module-info.<jar_path>``javac --patch-module <module_name> = <jar_path> <module_name>/module-info.java``jar uf <jar_path> -C <module_name> module-info.class` (14认同)

Nam*_*man 5

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

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

致谢: - 艾伦