當需要為項目添加Nexus私服上的public倉庫時,可以按下面所示配置。
<project>
...
<repositories>
<repository>
<id>nexus</id>
<name>Nexus</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>Nexus</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
...
</project>
這樣的配置隻對目前Maven項目有效,在實際應用中,我們往往想要通過一次配置就能讓本機所有的Maven項目都使用自己的Maven私服。這個時候可能會想到settings.xml檔案,該檔案中的配置對所有本機Maven項目有效,但是settings.xml并不支援直接配置repositories和pluginRepositories。所幸Maven還提供了Profile機制,能讓使用者将倉庫配置放到setting.xml中的Profile中,如下所示。
<settings>
...
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>nexus</id>
<name>Nexus</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>Nexus</name>
<url>http://localhost:8081/nexus/content/groups/public/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
<profile>
</profiles>
...
</settings>
這配置中使用了一個id為nexus的profile,這個profile包含了相關的倉庫配置,同時配置中又使用activeProfile元素将nexus這個profile激活,這樣當執行Maven建構的時候,激活的profile會将倉庫配置應用到項目中去。
上面的配置已經能讓本機所有的Maven項目從Nexus私服下載下傳構件。Maven除了從Nexus下載下傳構件之外,還會不時的通路中央倉庫central,我們希望的是所有Maven下載下傳請求都僅僅通過Nexus,以全面發揮私服的作用。這個時候就需要借助于Maven鏡像配置了。可以建立一個比對任何倉庫的鏡像,鏡像的位址為私服,這樣,Maven對任何倉庫的構件下載下傳請求都會轉到私服中。具體配置如下所示。
<settings>
...
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/nexus/content/groups/public/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
<repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
...
</settings>
這裡需要解釋的是倉庫及插件倉庫配置,他們的id都為central,也就是說,覆寫了超級POM中央倉庫的配置,他們的url已無關緊要,因為所有請求都會通過鏡像通路私服位址。配置倉庫及插件倉庫的主要目的是開啟對快照版本下載下傳的支援,當Maven需要下載下傳釋出版或快照版構件的時候,他首先檢查central,看該類型的構件是否支援,得到正面回答之後,再根據鏡像比對規則轉而通路私服倉庫位址。