解决idea无法解析maven依赖或卡慢的问题以及原理解析
解决idea无法获取maven依赖的问题以及分析maven的配置文件
使用maven时经常遇到网络问题导致无法下载依赖,设置了mirrors之后又会导致某些依赖包解析不了,并且即便设置了阿里云的maven镜像下载时依旧可能卡住
这是因为阿里云maven镜像配置的问题
首先恢复settings.json配置文件为默认镜像,恢复方式就是删除mirrors标签里面的阿里云镜像
使用以下正确的pom文件配置即可,pom文件内已经配置了依赖仓库和插件仓库,修改pom文件之后点击idea右侧的m图标重新加载maven项目即可

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>test</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>central</id>
<url>http://mirrors.163.com/maven/repository/maven-public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://mirrors.163.com/maven/repository/maven-public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<dependencies>
</dependencies>
</project>
原理解析:maven项目的repositories和pluginrepositories标签指定依赖的下载仓库,所以在这里指定国内的仓库即可,并且要把仓库id改为central以覆盖默认仓库配置,仓库和mirror的差别是,mirror的配置是用于覆盖仓库的配置的,mirror可以通过指定仓库id来强制仓库使用mirror配置的链接
有时候即便配置了阿里云的mirror下载依赖依旧很慢是因为在下载插件,而默认的插件仓库不会被mirror配置修改,所以需要手动指定插件仓库配置并配置为国内源
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
阿里云的默认配置是这个,mirrorOf代表匹配哪些仓库,这里默认匹配所有仓库,意味着你指定的仓库的链接全都无效,会被转到阿里云的镜像,也就是说当你配置了一个私有的repository,即便是你指定了链接为你的私有服务器地址,maven在检查settings.xml时发现有一个mirror匹配所有仓库,然后忽略你指定的私有地址,转而使用阿里云的镜像,所以希望阿里云镜像和私有仓库正常工作的话,使用上面的pom文件内配置仓库,或者把阿里云的mirror配置改为如下
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
https://maven.aliyun.com/repository/public
这个public结尾的链接指向阿里云的central仓库+jcenter仓库,是个复合仓库,而后缀改为central后这个链接只指向阿里云的central仓库,这样明确的配置比较好,或者你也可以简单粗暴的改为下面的配置,也不会出现任何问题
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
maven在编译项目时会结合一个默认的pom文件以及你的自定义配置来生成一个最终pom文件,这个默认pom文件就是所有maven项目默认父项目,所以几乎所有问题都可以通过修改pom文件解决,想要debug也可以查看最终的pom文件,我就是通过这个方式解决的maven仓库问题,使用如下命令查看最终pom文件
mvn help:effective-pom -Doutput=effective-pom.xml
Windows下命令有些不同,需要给输出文件加上双引号
mvn help:effective-pom -Doutput="effective-pom.xml"
更多推荐
所有评论(0)