Maven:配置Maven從Nexus下載構件(配置私服)。
當需要為專案新增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,看該型別的構件是否支援,得到正面回答之後,再根據映象匹配規則轉而訪問私服倉庫地址。