java - 使用模块时如何修补 package-info.java 文件?

标签 java javac java-9 java-platform-module-system

我可以使用这些说明修补系统模块文件。 https://openjdk.java.net/projects/jigsaw/quick-start#xoverride

当尝试使用相同的命令修补 package-info.java 时,如果修补的版本与模块中的版本内容相同,则不会生成 package-info.class 文件。但此行为不适用于非 package-info java 文件。

javac --patch-module java.base=src -d mypatches/java.base\ src/java.base/java/util/concurrent/package-info.java

在我原来的问题中,我提到了以下错误:

package-info.java:2: 错误:包存在于另一个模块中:java.base

我仍在尝试创建一个玩具示例来重现此错误。主要区别在于,当我收到此错误时,我正在使用自定义系统模块 (--system)。

最佳答案

JEP 261引入 --patch-module 应用于类文件,因此它也可以应用于 package-info.class。但随后它继续

The effect of each instance is to change how the module system searches for a type in the specified module.

由于package-info没有定义类型,所以上面这句话意味着--patch-modulepackage-info没有影响。

不过,我相信给出的确切错误消息是指定行为下的意外产物,就好像 package-info.java 被编译为与未命名的包关联,尽管位于补丁路径上.

关于java - 使用模块时如何修补 package-info.java 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54718276/

相关文章:

java - 为什么\R 在 Java 8 和 Java 9 之间的正则表达式中表现不同?

java - 如何在按 10 次时禁用 jbutton

Java - 字符中的重复大小写标签

java.io.NotSerializableException : org. apache.spark.SparkContext 序列化堆栈:- 对象不可序列化

java - NonNull 注解的实现

java - 在cmd中运行两个版本的Java

java - 将 Timescale DB 的 Gapfill 与 JOOQ 一起使用会抛出参数 : start cannot be NULL

java - 如何关闭字符串连接优化

hibernate + Java 9 + javax.transaction.SystemException

java - "but the compiler doesn' t 知道这个 "- what' 的意义吗?