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