如何使用 —patch-module java 选项在 JDK9+ 上制作 Eclipse 运行 修补的 JRE 模块

How to make Eclipse RUN patched JRE modules on JDK9+ with the —patch-module java option

询问如何使用 —patch-module javac 选项让 Eclipse compile

但是,我发现没有明显且简单的方法可以让 Eclipse 使用相同的配置 运行 编译的补丁代码。

即也可以在 运行 / 调试时使用上述问题中描述的构建路径/模块依赖项配置。

经过多次无果而终的搜索后,我求助于将 "—patch-module xxxx" 添加到 Launch “Debug Configurations / Arguments / VM Arguments”指向包含Eclipse编译的类的文件夹。例如

--patch-module java.security.jgss=/Users/xxx/svn/JGSSDebug/bin

成功了,但是有点蛮力!有没有我错过的更简单的方法?

编辑1

可以使用 Java Build Path / Module Dependencies / Show JPMS Options 从项目 JGSSDebug 得到正确的命令行语法,并手动粘贴到项目 JGSSDebug-Test 的 Launch Configuration 的 VM Arguments。 (...只是不要忘记在路径的末尾将“src”更改为“bin”...)。第一轮我自己编写了语法。

结束编辑1

我是 运行ning Eclipse 版本:2021-03 (4.19.0) Build id:20210312-0638

背景:

为了解决 SPNEGO SSO 的问题,我们希望在 JRE 模块 java.security.jgss 中使用额外的日志输出来丰富 类。

我创建了两个 Eclipse 项目:

  1. JGSSDebug 该项目包含 java.security.jgss 类 我们将使用日志输出进行修补。 .classpath 文件包含:

    <attribute name="patch-module" value="java.security.jgss=/JGSSDebug"/>'
    
  2. JGSSD调试测试 该项目将调用 java.security.jgss 中的代码,包括 JGSSDebug 中的修补代码。这取决于 JGSSDebug:

    <classpathentry combineaccessrules="false" kind="src" path="/JGSSDebug"/>
    

我能找到制作 JGSSDebug-Test 运行 补丁代码的唯一方法是通过如上所述的“VM 参数”。

两个项目都没有模块-info.java 文件。

我们正在使用 Azul OpenJDK 11.0.11 进行编译和 运行。

它不适用于依赖项目。每个项目都有自己独有的 项目 > 属性:Java 构建路径 > 模块依赖项 设置。

当前版本的 Eclipse 似乎存在问题:在 Module Dependencies 选项卡中,点击 Show JPMS Options... 按钮,将显示正确的 --patch-module java.security.jgss=...,但在启动配置中缺少这些 JPMS 选项。请确认,这已经报告给 Eclipse JDT。

作为替代方案或解决方法,为避免在每个启动配置中指定 --patch-module java.security.jgss=...,请将其作为默认 VM 参数添加到 JRE/JDK:

  1. 首选项 Java > 已安装的 JREs 中选择项目中使用的 JRE/JDK 并点击 编辑...
  2. 作为 默认 VM 参数 输入以下内容:
    --patch-module java.security.jgss=${workspace_loc:/JGSSDebug/bin}