在IntelliJ中配置-parameters参数修复Jackson相关测试失败问题
解决IntelliJ单独运行测试时缺少
-parameters参数导致Jackson测试失败的问题 这个问题我之前也碰到过,核心原因就是IntelliJ默认编译时不会带上-parameters参数,而Gradle已经配置了该参数,两边编译出来的类文件不一致,导致Jackson的参数名模块无法正常工作。下面给你几个靠谱的解决办法,按顺序尝试即可:
1. 确保Gradle配置同步到IntelliJ
首先,你的Gradle应该已经配置了-parameters参数(毕竟Gradle运行测试正常),比如在build.gradle里有类似这样的代码:
tasks.withType(JavaCompile) { options.compilerArgs.add('-parameters') }
如果还没加的话先补上这段配置。接下来要让IntelliJ和Gradle同步:
- 点击IntelliJ右侧Gradle面板里的「Sync Project with Gradle Files」按钮(就是那个刷新图标)
- 同步完成后,IntelliJ会继承Gradle的编译参数,之后编译和运行测试就会自动带上
-parameters了
2. 直接配置IntelliJ全局编译参数
如果Gradle同步后还是不行,可以直接给IntelliJ的Java编译器强制加上这个参数:
- 打开Settings(Windows/Linux:
File > Settings;Mac:IntelliJ IDEA > Settings) - 导航到
Build, Execution, Deployment > Compiler > Java Compiler - 在Additional command line parameters输入框里添加
-parameters - 点击Apply和OK保存设置,然后重新编译项目(
Build > Rebuild Project)
3. 清除IntelliJ缓存(终极方案)
有时候IntelliJ的缓存会残留旧的编译结果,即使改了配置也不生效,这时候可以清除缓存:
- 点击
File > Invalidate Caches... - 在弹出的窗口里选择「Invalidate and Restart」
- 重启后IntelliJ会重新编译项目,应该就能用上
-parameters参数了
补充说明
Jackson的jackson-module-parameter-names模块依赖Java编译时生成的参数名信息,而Java默认编译时不会把参数名存入类文件,必须通过-parameters参数开启。Gradle运行测试时用的是自己的编译流程,已经带上了这个参数;但IntelliJ单独运行测试时,默认用的是自身的编译配置,没加这个参数,所以编译出来的类没有参数名信息,导致Jackson无法正确序列化/反序列化,测试也就失败了。
内容的提问来源于stack exchange,提问作者Dennis van der Veeke
相关产品推荐
相关产品推荐

