在實際專案中會存在多個倉庫,包括我們自建的Nexus私有倉庫和阿里倉,這裡就需要設定多倉的順序,防止jar包不在其中一個倉庫時會自動從另外一個倉庫中拉取。
Maven的Setting配置中有mirror和repository,它們的作用都是配置遠端maven倉庫的地址。repository就是直接配置站點地址,mirror則是作為站點的映象,代理某個或某幾個站點的請求,實現對repository的完全代替。
有兩種形式可以配置多個repository, 配置多個profile或者在同一個profile中配置多個repository.配置多profile時,還需要配置activeProfiles使配置生效。
下載依賴時,maven會按照配置從上到下的順序,依次嘗試從各個地址下載,成功下載為止。
無論是配置國內的maven倉庫,還是配置nexus之類私服,都可以直接配置成repository, 這樣即使配置的這些倉庫有些問題導致一些包下不下來,也可以繼續用別的倉庫嘗試。
<repository>時<id>似乎也沒什麼用,如果你只是在pom.xml中配置個倉庫,這個id是沒什麼用的,可以隨便寫。這個id是配合上面講的mirror一塊使用的,還記得mirrorOf嗎,我們配置mirrorOf為<mirrorOf>central</mirrorOf>是,mirror中的url會將預設的central倉庫的url給覆蓋了,所以這裡的<repository>標籤下的id是給mirrorOf用的。當repository中的id與mirrorOf一致時,mirrorOf中的url就會覆蓋repository中的url地址。
在Mirrors部分可以配置多個映象倉庫,但是在該部分配置多個倉庫,並不能提供自動查詢多個倉庫的功能,預設還是取第一個倉庫進行查詢。
我們這裡採用設定profiles的方式來達到想要的目的,直接上配置:
<?xml version="1.0" encoding="utf-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <localRepository>D:/m2/repository</localRepository> <pluginGroups> <pluginGroup>org.mortbay.jetty</pluginGroup> </pluginGroups> <proxies> </proxies> <servers> <server> <id>nexus-releases</id> <username>ali</username> <password>123456</password> </server> </servers> <mirrors> </mirrors> <profiles> <profile> <id>jdk-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile> <profile> <id>downloadSources</id> <properties> <downloadSources>true</downloadSources> <downloadJavadocs>true</downloadJavadocs> </properties> </profile> <profile> <id>aliyun</id> <repositories> <repository> <id>aliyun</id> <url>https://maven.aliyun.com/repository/public</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots> </repository> </repositories> </profile> <profile> <id>nexus-releases</id> <repositories> <repository> <id>nexus-releases</id> <url>http://10.3.87.5:8082/repository/maven-public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </snapshots> </repository> </repositories> </profile> </profiles> <activeProfiles> <activeProfile>aliyun</activeProfile> <activeProfile>nexus-releases</activeProfile> </activeProfiles> </settings>
注意:這裡面配置了maven.compiler.source,當環境中有jdk1.8以下版本時用maven打包時會報jdk低版本的提示,需要統一打包時jdk的版本,因此需要在此指定