在IDEA中打开依赖的jar包中的class类时,编辑器右上方会提示下载源码。点击”Download Sources”会从maven仓库里下载jar包对应的源码。如下图所示:

但是,最近就碰到了在点击Download Sources时,提示Cannot download sources。

使用“IDEA Cannot download sources”搜索,发现网上有很多种情况都会出现这种错误,但是也没说清楚原因,只是说几种方式都试下,当然,结果就是,有的或许碰巧就解决了问题,有的可能就无法解决。而我就是试了好几种都没起作用。

作为程序员,遇到问题的第一反应是去看日志。于是,想去查下出现上面的错误提示的时候,IDEA的日志里或许应该有出错的原因的提示。

在IDEA中,点击菜单栏中的Help–》Show Log In Explorer,就可以打开IDEA的日志文件夹,然后在此文件夹中找到idea.log这个日志文件,使用文本编辑器打开这个日志文件,拉到最下面查看最新的日志。可以看到如下的提示: 使用其中的关键词”NoRepositoryConnectorException: Blocked mirror for repositories”去搜索引擎或者chatgpt查询,基本就可以确定原因了。

大概原因就是,从maven 3.8.1版本之后,在配置文件中默认block了http的仓库地址链接,必须用https才可以。然后去检查了自己的本地主目录下的maven settings.xml的配置,果然仓库地址是使用了http协议的仓库地址,换成https协议的仓库地址,然后,在IDEA中关闭打开的工程,去删除工程根目录下的.idea文件夹内,之后再在IDEA中重新导入之前的工程, 就可以download sources了。

以上就是本次问题的排查思路。遇到问题直接搜索或者问chatgpt,未必能够获得答案,还是要自己思考排查,比如去看日志,然后再结合搜索引擎或者chatgpt,这样解决问题更加高效。

PS:在maven安装目录下的conf目录中的默认的settings.xml文件中,有如下配置,正是这个配置导致了Cannot download sources。

<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>external:http:*</mirrorOf>
<name>Pseudo repository to mirror external repositories initially using HTTP.</name>
<url>http://0.0.0.0/</url>
<blocked>true</blocked>
</mirror>