如何排查 IDEA 自身报错?| 以 IntelliJ IDEA 2023.1.4 无法刷新项目 Maven 模块的问题为例

这个问题是 2023 年 7 月 26 日遇到的,当时还是 IDEA 2023.1.4,结果文章还没写完,7 月 27 日自动给更新了 IDEA 2023.2。问题估计解决了。

所以,本文就简单提一下 IDEA 自身报错的排查方法。

规避/解决方式

先说问题怎么处理:

IDEA 设置从 Maven wrapper 改为使用内置 Maven。

排查步骤

Maven 项目模块调整后,IDEA 没有正确识别新模块

项目的 Maven 模块有一些调整,fixture 下新增了一个 database 模块。按理说,平时 IDEA 会自动识别新模块并自动移除被删除的模块。但是,新增的 database 模块一直没有被加入源码,被删除的模块仍然在模块列表里。

使用 Maven 命令 install 正常,但 IDEA 构建项目会发生找不到包、类等编译错误。

检查 database 模块的 pom.xml 文件,里面没有发现错误。(不然 Maven install 执行也会出问题)

IDEA 尝试执行 Reload All Maven Projects

执行后问题没有解决,但在 Build 窗口中看到报了一个错误:

这个错误没有任何详细信息。

尝试过清除缓存等手段均无法解决问题。

既然 IDEA 报错了,问题还没解决,要想办法知道具体报的是什么错。

检查 IDEA 日志

找 IDEA 日志的方式有很多,可以在 Help 菜单中直接打开,也可以通过 Actions 窗口导航。

Linux 下可以直接 tail IDEA log,其他平台可能需要手动打开 IDEA 日志文件。

搜索 Build 窗口中抛出的异常 java.lang.reflect.InvocationTargetException,在日志中发现了完整信息:

2023-07-26 16:31:47,659 [  59616]   INFO - #o.j.i.m.p.MavenProjectsProcessor - [maven import] MavenProjectsProcessorReadingTask took 3303ms
2023-07-26 16:31:47,765 [  59722]   WARN - #o.j.i.maven - java.lang.reflect.InvocationTargetException
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
	at org.jetbrains.idea.maven.server.MavenRemoteObject.wrapToSerializableRuntimeException(MavenRemoteObject.java:28)
	at org.jetbrains.idea.maven.server.Maven3XServerEmbedder.<init>(Maven3XServerEmbedder.java:239)
	at org.jetbrains.idea.maven.server.Maven36ServerEmbedderImpl.<init>(Maven36ServerEmbedderImpl.java:8)
	at org.jetbrains.idea.maven.server.Maven36ServerImpl.createEmbedder(Maven36ServerImpl.java:22)
# 省略部分链路
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:699)
	at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.jetbrains.idea.maven.server.Maven3XServerEmbedder.<init>(Maven3XServerEmbedder.java:229)
# 省略部分链路
	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	... 1 more
Caused by: java.io.FileNotFoundException: The specified global settings file does not exist: /home/wuweijie/conf/settings.xml
	at org.apache.maven.cli.configuration.SettingsXmlConfigurationProcessor.process(SettingsXmlConfigurationProcessor.java:117)
	at org.apache.maven.cli.MavenCli.configure(MavenCli.java:1169)
	at org.apache.maven.cli.MavenCli.loadCoreExtensions(MavenCli.java:758)
	at org.apache.maven.cli.MavenCli.container(MavenCli.java:633)
	... 24 more

发现错误原因可能是 Maven 尝试在路径 /home/wuweijie/conf/settings.xml 读取配置文件,但这个路径 conf 目录并不存在,而且我也从来没有在 .m2 目录以外的地方放置过任何 Maven 配置。

检查 Maven 配置

配置文件没有指定。

虽然勾选了使用 .mvn/maven.confg,但这个路径文件也不存在。

所以 IDEA 到底是从哪里弄来了一个不存在的路径?

检索 IDEA 的 YouTrack(类似 GitHub Issues)

发现确实有人反馈了同样的问题,已经在 2023.1.5 和 2023.2 解决了。

https://youtrack.jetbrains.com/issue/IDEA-322338/maven-reimport-fails-with-java.io.FileNotFoundException-The-specified-global-settings-file-does-not-exist-conf-settings.xml

小结

其实查 IDEA 本身的问题和平时没有太大的差异:

  • 查日志,找出具体原因;
  • 查 issues,看是否有同样问题或解决方案;没有类似的问题就提个新的 issue。
  • 感兴趣的可以自己深入排查。
相关推荐
代码小鑫9 分钟前
A032-基于Spring Boot的健康医院门诊在线挂号系统
java·开发语言·spring boot·后端·spring·毕业设计
训山17 分钟前
4000字浅谈Java网络编程
java·开发语言·网络
VertexGeek23 分钟前
Rust学习(四):作用域、所有权和生命周期:
java·学习·rust
喔喔咿哈哈39 分钟前
【手撕 Spring】 -- Bean 的创建以及获取
java·后端·spring·面试·开源·github
码农小丘41 分钟前
了解springboot国际化用途以及使用
java·spring boot·spring
卡皮巴拉吖1 小时前
【JavaEE初阶】多线程上部
java·jvm·java-ee
tian-ming1 小时前
JavaWeb后端开发知识储备1
java·spring boot·nginx·spring·maven
spy47_1 小时前
JavaEE 重要的API阅读
java·笔记·java-ee·api文档阅读
夏微凉.1 小时前
【JavaEE进阶】Spring AOP 原理
java·spring boot·后端·spring·java-ee·maven
只因在人海中多看了你一眼1 小时前
Java EE 技术基础知识体系梳理
java·java-ee