20

假设我有一些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

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

4

2 回答 2

20

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

javac --patch-module <module name>=<path to jar> module-info.java
于 2017-11-10T11:58:40.693 回答
7

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

module-info.java然后将输出目录 (-d) 设置为您提取内容的目录进行编译。

学分:-艾伦

于 2017-11-10T12:00:26.790 回答