问题描述
This SO question 询问如何使用 —patch-module javac 选项让 Eclipse 编译。
但是,我没有发现让 Eclipse 使用相同配置运行编译的修补代码的明显且简单的方法。
即在运行/调试时也使用上述问题中描述的构建路径/模块依赖项配置。
经过多次无果而终,我求助于将 "—patch-module xxxx" 添加到 Launch “Debug Configurations / Arguments / VM Arguments” 以指向文件夹包含由 Eclipse 编译的类。例如
--patch-module java.security.jgss=/Users/xxx/svn/jgssDebug/bin
那行得通,但有点蛮力!有没有我错过的更简单的方法?
编辑1
可以使用项目jgssDebug中的Java Build Path / Module Dependencies / Show JPMS Options来获取正确的命令行语法,并手动粘贴到项目启动配置的虚拟机参数jgssDebug-Test。 (...只是不要忘记将路径末尾的“src”更改为“bin”...)。第一次我自己使用语法。
结束编辑1
我正在运行 Eclipse 版本:2021-03 (4.19.0) 构建 ID:20210312-0638
背景:
为了解决 SPNEGO SSO 的问题,我们希望通过额外的日志输出来丰富 JRE 模块中的类java.security.jgss。
我创建了两个 Eclipse 项目:
-
jgssDebug 该项目包含我们将使用日志输出修补的 java.security.jgss 类。 .classpath 文件包含:
<attribute name="patch-module" value="java.security.jgss=/jgssDebug"/>'
-
jgssDebug-Test 该项目将调用 java.security.jgss 中的代码,包括 jgssDebug 中的修补代码。这取决于 jgssDebug:
<classpathentry combineaccessrules="false" kind="src" path="/jgssDebug"/>
我能找到的使 jgssDebug-Test 运行修补代码的唯一方法是通过上述“VM 参数”。
两个项目都没有 module-info.java 文件。
我们使用 Azul OpenJDK 11.0.11 来编译和运行。
解决方法
它不适用于依赖项目。每个项目都有自己专属的项目>属性:Java构建路径>模块依赖设置。
当前版本的 Eclipse 似乎存在问题:在 Module Dependencies 选项卡中,当点击 Show JPMS Options... 按钮时,正确的 { {1}} 将显示,但在启动配置中缺少这些 JPMS 选项。请确保,这已报告给 Eclipse JDT。
作为替代或解决方法,为避免在每个启动配置中指定 --patch-module java.security.jgss=...
,请将其作为默认 VM 参数添加到 JRE/JDK:
- 在首选项Java >已安装的JRE中选择您的项目中使用的JRE/JDK,然后点击编辑...
- 作为默认虚拟机参数,输入以下内容:
--patch-module java.security.jgss=...