1. 程式人生 > >Maven:配置Maven從Nexus下載構件(配置私服)。

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,看該型別的構件是否支援,得到正面回答之後,再根據映象匹配規則轉而訪問私服倉庫地址。