如何将模块声明注入 JAR?
How to inject module declaration into 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 name>=<path to jar> module-info.java
或者,要编译生成的 module-info.java
,您还需要将 JAR 的内容提取到一个目录中。
然后编译 module-info.java
并将输出目录 (-d) 设置为您提取内容的目录。
假设我有一些我没有源代码的库 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 name>=<path to jar> module-info.java
或者,要编译生成的 module-info.java
,您还需要将 JAR 的内容提取到一个目录中。
然后编译 module-info.java
并将输出目录 (-d) 设置为您提取内容的目录。