2017年11月13日 星期一

私服 (Maven 5)

私人伺服器,簡稱私服



左邊為電腦,右邊為 maven central,中間為私服,每次都要連到 maven central 太慢了,所以才會架設中間的私服,讓每一台電腦用,如果私服沒有,那私服會去下載

如果只有一台電腦,那就沒差了,但可以練習用

此篇用的私服是 Sonatype Nexus,下載 OSS 版的來練習,這裡用的是 nexus-3.2.1-01-win64
下載解壓後會有兩個資料夾,將 nexus-3.2.1-01 資料夾裡的 bin 加到環境變數,然後執行 nexus /run,啟動有點久,出現了「Started Sonatype Nexus OSS 3.2.1-01」不要關掉,然後到 localhost:8081,預設帳密是 admin/admin123,可看官網文件的 Part1
換 port 可以到 nexus-3.2.1-01\etc\nexus-default.properties 改

type 有三種
group:可以將以下兩個類型,一個類型包括很多網址,可以合併成一個
hosted:本地倉庫
proxy:代理倉庫(maven-central)


1的圖示要登入才有,左圖的 Security \ Users 預設只有 admin 和 anonymous,可以先將 anonymous 關閉,也可以在這新增使用者、修改密碼…等操作


第 2 版可以全拉,但第 3 版不知道為什麼不行,只好拉二個了

maven-central 裡有個 Rebuild index 按鈕,因為一開始 本地倉庫可能以經有 jar 了,但現在才架好 nexus,那 nexus 肯定沒有這些 jar,所以可以按這個鈕,同步一下

打開 pom 檔,增加如下的設定



<repositories>
    <repository>
        <id>nexus2</id>
        <url>http://localhost:8081/repository/maven-public/</url>
        <releases>
            <enabled>false</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
    
    <repository>
        <id>central</id>
        <url>http://localhost:8081/repository/maven-central/</url>
    </repository>
</repositories>

※將網址貼到 url 裡。 尤於 url 只能寫一個,所以我寫了兩個 repository 了
如果是第 2 版,因為可以全拉到 group,所以可以只寫一個

※release、snapshots 標籤下的 enabled 標籤表示是否可以下載

※此時隨便找一個目前還沒有的jar,然後下 mvn install,在 console 就能看到從 nexus 下載了

※但如果沒有設定這個東西的人,就不會去 私服下載,所以最好把這個設定放在 settings.xml裡,所以 pom 檔可以刪了,改放在 settings.xml,然後將 settings.xml 複製給要用的人,但要注意設定完不會生效,必需要配置 activeProfile,如下:

<profiles>
    <profile>
        <id>nexus</id>
        <repositories>
            <repository>
                <id>nexus2</id>
                <url>http://localhost:8081/repository/maven-public/</url>
                <releases>
                    <enabled>false</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
    
            <repository>
                <id>central</id>
                <url>http://localhost:8081/repository/maven-central/</url>
            </repository>
        </repositories>
    </profile>
</profiles>
    
<activeProfiles>
    <activeProfile>nexus</activeProfile>
</activeProfiles>


※上面提供的 nexus 連結的 Part2 就幫我們設定好了,只要我們把 copy 的網址貼進去就行
裡面分成三個大 element
profiles:將 pom 檔裡的設定改成放在這,但不會生效
activeProfiles:必需配置這裡的設定才會將 profiles 對應的 id 生效
mirrors:如果不配置,私服關閉了,還是可以去 maven central 下載,可在 settings.xml 加設定,如下:
<mirrors>
    <mirror>
        <id>nexus</id>
        <mirrorOf>*</mirrorOf>
        <url>http://localhost:8081/repository/maven-central/</url>
    </mirror>
</mirrors>

※預設其中有一個 id 為 central 的,在 下載好的maven\lib\maven-model-builder-3.5.2.jar 的 org\apache\maven\model\pom-4.0.0.xml ,他預設 snapshot 的 enable 是 false,可在這裡覆寫

※如果要將自己寫的檔案發佈到私服還得在父 pom 檔裡設定  distributionManagement,這樣子之後就可以用 mvn deploy 發佈到私服,但是會出現「Error code 401, Unauthorized」,如下:

<distributionManagement>
    <repository>
        <id>dmRelease</id>
        <url>http://localhost:8081/repository/maven-releases/</url>
    </repository>
    
    <snapshotRepository>
        <id>dmSnapshot</id>
        <url>http://localhost:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>



因為沒有帳號密碼,所以還得在 settings.xml 設定 servers element,裡面的 id要對要到 distributionManagement 裡的 repository 的 id,這要才能發佈到私服
<servers>
    <server>
        <id>dmRelease</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
    
    <server>
        <id>dmSnapshot</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
</servers>

※可以來這個路徑確認一下有沒有 deploy 成功,看你是releases 還 snapshots

※也可以用 Search >> Maven 搜尋

沒有留言:

張貼留言