解决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"
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐