美文网首页程序员慧响
关于更换Maven国内镜像的经验总结

关于更换Maven国内镜像的经验总结

作者: zning1994 | 来源:发表于2020-06-09 21:40 被阅读0次

    最近需要编译flink-1.9.0和flink-shaded,由于网上所给信息是,在编译时需要在两个工程内设置非中央仓库的官方镜像源。对于更换Maven国内镜像有一定的经验总结。本文以阿里云为例,其他镜像源——比如腾讯云——也是可以使用的。

    今天需要编译flink-1.9.0flink-shaded,由于网上所给信息是,在编译时需要在两个工程内设置非中央仓库的官方镜像源(flink-1.9.0已经自带):

    <profile>
        <id>vendor-repos</id>
        <activation>
            <property>
                <name>vendor-repos</name>
            </property>
        </activation>
        <!-- Add vendor maven repositories -->
        <repositories>
            <!-- Cloudera -->
            <repository>
                <id>cloudera-releases</id>
                <url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
            <!-- Hortonworks -->
            <repository>
                <id>HDPReleases</id>
                <name>HDP Releases</name>
                <url>https://repo.hortonworks.com/content/repositories/releases/</url>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
                <releases>
                    <enabled>true</enabled>
                </releases>
            </repository>
            <repository>
                <id>HortonworksJettyHadoop</id>
                <name>HDP Jetty</name>
                <url>https://repo.hortonworks.com/content/repositories/jetty-hadoop</url>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
                <releases>
                    <enabled>true</enabled>
                </releases>
            </repository>
            <!-- MapR -->
            <repository>
                <id>mapr-releases</id>
                <url>https://repository.mapr.com/maven/</url>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
                <releases>
                    <enabled>true</enabled>
                </releases>
            </repository>
        </repositories>
    </profile>
    

    由于Maven本身是连接的apache.org的中央仓库镜像源,因此我在网上找到了阿里镜像源进行更换。其中教程一与二给的更换镜像源XML配置如下:

    <mirrors>
        <mirror>
            <id>aliyunmaven</id>
            <mirrorOf>*</mirrorOf>
            <name>阿里云公共仓库</name>
            <url>https://maven.aliyun.com/repository/public</url>
        </mirror>
        <mirror>
            <id>aliyunmaven</id>
            <mirrorOf>*</mirrorOf>
            <name>阿里云谷歌仓库</name>
            <url>https://maven.aliyun.com/repository/google</url>
        </mirror>
        <mirror>
            <id>aliyunmaven</id>
            <mirrorOf>*</mirrorOf>
            <name>阿里云阿帕奇仓库</name>
            <url>https://maven.aliyun.com/repository/apache-snapshots</url>
        </mirror>
        <mirror>
            <id>aliyunmaven</id>
            <mirrorOf>*</mirrorOf>
            <name>阿里云spring仓库</name>
            <url>https://maven.aliyun.com/repository/spring</url>
        </mirror>
        <mirror>
            <id>aliyunmaven</id>
            <mirrorOf>*</mirrorOf>
            <name>阿里云spring插件仓库</name>
            <url>https://maven.aliyun.com/repository/spring-plugin</url>
        </mirror>
    </mirrors>
    

    但是在更改后,我发现编译失败,说是在阿里云仓库找不到需要在我文章开头设置的仓库里找的包。但是我明明在工程的pom.xml里设置了四个非中央的官方仓库了呀?

    后来又搜了两篇阿里云教程设置,我发现其XML配置为:

    <mirrors>
        <mirror>
            <id>aliyunmaven</id>
            <mirrorOf>central</mirrorOf>
            <name>aliyun maven</name>
            <url>https://maven.aliyun.com/repository/public </url>
        </mirror>
    </mirrors>
    

    其中,<mirrorOf>central</mirrorOf>同之前的仓库设置是不一样的,之前是*,现在是central。据此,我分析,由于通配符的问题,Maven全局的Settings.xml文件,将我工程内pom.xml设置的四个非中央官方仓库的设置给一并覆盖了,导致失效,从而无法让工程从应有的位置拉取依赖包,导致编译失败。

    经过修改之后,flink-shaded工程目前编译已正常通过。确认是这个问题。因此我们可以知道的是:

    • 若设置了<mirrorOf>*</mirrorOf>这个标签,则可能会导致工程内pom.xml相应设置的仓库失效。全局设置覆盖了工程设置。
    • 应避免直接设置<mirrorOf>*</mirrorOf>这个标签,而是设置指定仓库例如<mirrorOf>central</mirrorOf>表示此为中央仓库的代理。

    相关文章

      网友评论

        本文标题:关于更换Maven国内镜像的经验总结

        本文链接:https://www.haomeiwen.com/subject/rfxytktx.html