最近需要編譯flink-1.9.0和flink-shaded椰拒,由于網(wǎng)上所給信息是玄妈,在編譯時(shí)需要在兩個(gè)工程內(nèi)設(shè)置非中央倉庫的官方鏡像源。對(duì)于更換Maven國內(nèi)鏡像有一定的經(jīng)驗(yàn)總結(jié)灵疮。本文以阿里云為例织阅,其他鏡像源——比如騰訊云——也是可以使用的。
今天需要編譯flink-1.9.0
和flink-shaded
震捣,由于網(wǎng)上所給信息是,在編譯時(shí)需要在兩個(gè)工程內(nèi)設(shè)置非中央倉庫的官方鏡像源(flink-1.9.0
已經(jīng)自帶):
<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的中央倉庫鏡像源润樱,因此我在網(wǎng)上找到了阿里鏡像源進(jìn)行更換羡棵。其中教程一與二給的更換鏡像源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>阿里云阿帕奇?zhèn)}庫</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>
但是在更改后壹若,我發(fā)現(xiàn)編譯失敗,說是在阿里云倉庫找不到需要在我文章開頭設(shè)置的倉庫里找的包皂冰。但是我明明在工程的pom.xml
里設(shè)置了四個(gè)非中央的官方倉庫了呀?
后來又搜了兩篇阿里云教程設(shè)置,我發(fā)現(xiàn)其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>
同之前的倉庫設(shè)置是不一樣的剔应,之前是*
,現(xiàn)在是central
语御。據(jù)此峻贮,我分析,由于通配符的問題纤控,Maven全局的Settings.xml
文件碉纺,將我工程內(nèi)pom.xml
設(shè)置的四個(gè)非中央官方倉庫的設(shè)置給一并覆蓋了,導(dǎo)致失效骨田,從而無法讓工程從應(yīng)有的位置拉取依賴包,導(dǎo)致編譯失敗态贤。
經(jīng)過修改之后,flink-shaded
工程目前編譯已正常通過悠汽。確認(rèn)是這個(gè)問題芥驳。因此我們可以知道的是:
- 若設(shè)置了
<mirrorOf>*</mirrorOf>
這個(gè)標(biāo)簽茬高,則可能會(huì)導(dǎo)致工程內(nèi)pom.xml
相應(yīng)設(shè)置的倉庫失效。全局設(shè)置覆蓋了工程設(shè)置爵憎。 - 應(yīng)避免直接設(shè)置
<mirrorOf>*</mirrorOf>
這個(gè)標(biāo)簽婚瓜,而是設(shè)置指定倉庫例如<mirrorOf>central</mirrorOf>
表示此為中央倉庫的代理。