如何使用 —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 项目:
JGSSDebug
该项目包含 java.security.jgss 类 我们将使用日志输出进行修补。
.classpath 文件包含:
<attribute name="patch-module" value="java.security.jgss=/JGSSDebug"/>'
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:
- 在 首选项 Java > 已安装的 JREs 中选择项目中使用的 JRE/JDK 并点击 编辑...
- 作为 默认 VM 参数 输入以下内容:
--patch-module java.security.jgss=${workspace_loc:/JGSSDebug/bin}
但是,我发现没有明显且简单的方法可以让 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 项目:
JGSSDebug 该项目包含 java.security.jgss 类 我们将使用日志输出进行修补。 .classpath 文件包含:
<attribute name="patch-module" value="java.security.jgss=/JGSSDebug"/>'
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:
- 在 首选项 Java > 已安装的 JREs 中选择项目中使用的 JRE/JDK 并点击 编辑...
- 作为 默认 VM 参数 输入以下内容:
--patch-module java.security.jgss=${workspace_loc:/JGSSDebug/bin}