左邊為電腦,右邊為 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 搜尋
沒有留言:
張貼留言