Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
          <2014年9月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          常用鏈接

          留言簿(19)

          隨筆分類(107)

          隨筆檔案(141)

          文章分類(284)

          文章檔案(342)

          相冊

          收藏夾(58)

          家裝

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          具體怎樣使用deploy命令部署構件到nexus服務器上可以參考經典的《Maven Definitive Guide》(Maven操作指南),書中的16.7節里面講解的非常詳細。假設我們在項目pom.xml文件中對maven服務器的設置信息如下:
          <distributionManagement>
          <repository>
          <id>nexus-releases</id>
          <name>Local Nexus Repository</name>
          <url>http://192.168.1.99:8081/content/repositories/releases</url>
          </repository>
          <snapshotRepository>
          <id>nexus-snapshots</id>
          <name>Local Nexus Repository</name>
          <url>http://192.168.1.99:8081/content/repositories/snapshots</url>
          </snapshotRepository>
          </distributionManagement>

          這里我要說的是在使用的過程中遇到的幾個都是“Failed to transfer file”錯誤,錯誤信息如下格式:

          Error deploying artifact: Failed to transfer file:… Return code is:4xx

          也就是說前面錯誤的信息都是一樣的,只是后面返回的HTTP狀態數字不同。

          1. Return code is: 405
          這個問題害我查了兩個多小時才發現錯誤的根源,簡單的錯誤就是在Maven執行到上傳文件到服務器的時候出現一個HTTP 405錯誤。開始的時候總以為是Maven本身的問題,所以在這個上面浪費了不少時間。后來仔細查了405錯誤的含義是“用來訪問本頁面的 HTTP 方法不被允許”,最后終于發現是因為前面repository的地址寫錯了,或者是端口寫錯,或者是地址中的某個單詞拼錯了,反正原因就是 repository的地址寫錯了。

          2. Return code is: 401或者Return code is: 403
          其實403錯誤就是“禁止訪問”的含義,所以問題的根源肯定在授權上面。Maven在默認情況下會使用deployment帳號(默認密碼deploy) 登錄的系統,但是關鍵的Nexus中Releases倉庫默認的Deployment Policy是“Disable Redeploy”,所以無法部署的問題在這個地方,方法是將其修改為“Allow Redeploy”就可以了。


          到這里還沒有結束,因為如果直接按照上面的設置的話會有一個安全問題,那就是這樣所有的開發人員都可以將構件部署到Nexus的releases倉庫中 了,時間長了會導致這個倉庫中非常亂,這也應該是nexus為什么默認情況下將Release倉庫的發布權限關閉的原因了。解決這個問題的整體思路就是在 部署構件的時候需要使用用戶名和密碼登錄,操作如下:
          (1) 首先將Releases倉庫默認的Deployment Policy修改為“Allow Redeploy”;
          (2) 然后在右邊的Security下面的Users中,修改deployment帳號的密碼,方法是在帳號上右鍵,然后選擇“Set Password”(PS:這個操作我找了好久,后來無意中右鍵才找到,呵呵~~);

          (3) 這個時候如果直接執行 mvn deploy 命令的話就又會出現401錯誤,還有一步就是將密碼設置到Maven settings.xml中。打開settings.xml文件(${user.home}/.m/settings.xml或%{m2_home} /conf/settings.xml),找到<servers>,然后修改信息如下:
          <server>
          <id>nexus-releases</id>
          <username>deployment</username>
          <password>deploydv89</password>
          </server>

          <server>
          <id>nexus-snapshots</id>
          <username>deployment</username>
          <password>deploydv89</password>
          </server>

          這里需要特別說明一句的是里面的id必須和你在項目pom.xml文件中distributionManagement下面設置的倉庫id一致!當然了,這個里面你也可以設置admin帳號,或者參照deployment的權限手動添加新的帳號等等都是可以的。

          當然,問題到這里已經得到了比較完美的解放,但是
          如果有人還要較真的話會想到帳號的密碼直接放到配置文件里面不是很安全。其實只要這里不建議放admin帳號,而deployment是無法登錄的。如果非要更安全一些的話,也可以使用Maven 2.1.0之后所提供的密碼加密功能,操作的步驟如下:
          (1) 使用“mvn –encrypt-master-password xxx”或“mvn –emp xxx”創建一個主密鑰,后面的xxx就是你所要設置的密鑰的內容,這個密鑰主要用于后面加密密碼來用的;命令執行之后會產生一個類似 {jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}形式的字符串。
          (2) 在${user.home}/.m/目錄下創建一個名為settings-security.xml文件,我們將剛剛產生的主密鑰放到這個文件中,文件的內容如下:
          <?xml version="1.0" encoding="UTF-8"?>
          <settingsSecurity>
          <master>{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}</master>
          </settingsSecurity>

          注意,這個settings-security.xml文件一定要放在${user.home}/.m/目錄下面,而不能放在${m2_home}/conf目錄下!
          (3) 使用“mvn –encrypt-password xxx”或“mvn –ep xxx”命令對帳號的密碼進行加密,后面的xxx就是帳號的密碼,加密之后依然會產生一個“{xxx}”形式的字符串,將這個字符串替換上面 settings.xml文件中的server下面的password節點內容即可。
          還有一種更安全的方式,就是將主密鑰放到U盤里面,具體的操作可以看下面的參考資料。

          3. Return code is: 400
          400錯誤的含義是“錯誤的請求”,在這里的原因是往往是沒有部署到nexus的倉庫中。nexus的repository分三種類型:Hosted、 Proxy和Virtual,另外還有一個repository group(倉庫組)用于對多個倉庫進行組合。部署的時候只能部署到Hosted類型的倉庫中,如果是其他類型就會出現這個400錯誤。

          還有一種情況也會出現400錯誤,就是默認情況下部署構件到Releases倉庫中有時也會出現400錯誤,這個原因就像上面提到的那樣,Nexus中 Releases倉庫默認的Deployment Policy是“Disable Redeploy”,所以無論你在settings.xml文件中將server的username設置為deployment還是使用admin都是無 法部署的,就會出現這個400錯誤。這個問題也困擾了我好長時間,而且我還看到網上有人說admin沒有部署構件的權限,這個是不對的。修改的方法可以參 考上面第2條的做法。


          mvn deploy -Dmaven.test.skip=true




          <?xml?version="1.0"?encoding="UTF-8"?>
          <settings?xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          ????xmlns:xsi
          ="http://www.w3.org/2001/XMLSchema-instance"
          ????xsi:schemaLocation
          ="http://maven.apache.org/SETTINGS/1.0.0?http://maven.apache.org/xsd/settings-1.0.0.xsd">
          ????
          <localRepository>F:\m2Repository</localRepository>
          ????
          ????
          <pluginGroups>
          ????
          </pluginGroups>

          ????
          <proxies>

          ????
          </proxies>
          ????
          ????
          <servers>
          ????????
          <server>
          ????????????
          <id>nexus-releases</id>
          ????????????
          <username>admin</username>
          ????????????
          <password>admin123</password>
          ????????
          </server>

          ????????
          <server>
          ????????????
          <id>nexus-snapshots</id>
          ????????????
          <username>admin</username>
          ????????????
          <password>admin123</password>
          ????????
          </server>
          ????
          </servers>
          ????

          ????
          <mirrors>
          ????????
          <mirror>
          ????????????
          <id>nexus</id>
          ????????????
          <mirrorOf>*</mirrorOf>
          ????????????
          <name>Nexus?lirenkj</name>
          ????????????
          <url>http://nexus.lirenkj.com/content/groups/public/</url>
          ????????
          </mirror>
          ????
          </mirrors>

          ????
          <profiles>
          ????????
          <profile>
          ????????????
          <id>dev</id>

          ????????????
          <activation>
          ????????????????
          <jdk>1.7</jdk>
          ????????????
          </activation>

          ????????????
          <repositories>
          ????????????????
          <repository>
          ????????????????????
          <id>nexus</id>
          ????????????????????
          <name>local?private?nexus</name>
          ????????????????????
          <url>http://nexus.lirenkj.com/content/groups/public/</url>
          ????????????????????
          <releases>
          ????????????????????????
          <enabled>true</enabled>
          ????????????????????
          </releases>
          ????????????????????
          <snapshots>
          ????????????????????????
          <enabled>true</enabled>
          ????????????????????
          </snapshots>
          ????????????????
          </repository>
          ????????????
          </repositories>
          ????????????
          <pluginRepositories>
          ????????????????
          <pluginRepository>
          ????????????????????
          <id>nexus</id>
          ????????????????????
          <name>local?private?nexus</name>
          ????????????????????
          <url>http://nexus.lirenkj.com/content/groups/public/</url>
          ????????????????????
          <releases>
          ????????????????????????
          <enabled>true</enabled>
          ????????????????????
          </releases>
          ????????????????????
          <snapshots>
          ????????????????????????
          <enabled>true</enabled>
          ????????????????????
          </snapshots>
          ????????????????
          </pluginRepository>
          ????????????
          </pluginRepositories>
          ????????
          </profile>
          ????
          </profiles>

          ????
          <activeProfiles>
          ????????
          <activeProfile>dev</activeProfile>
          ????
          </activeProfiles>
          </settings>

          posted on 2010-09-26 00:06 禮物 閱讀(35967) 評論(2)  編輯  收藏 所屬分類: Maven2

          評論

          # re: Maven使用deploy命令部署構建[未登錄] 2014-09-29 09:42 Anderson
          好,寫的比較詳細,按此配置成功。  回復  更多評論
            

          # re: Maven使用deploy命令部署構建 2015-12-01 16:08 曲奇餅
          感謝!我也碰到這個問題了!  回復  更多評論
            

          主站蜘蛛池模板: 合阳县| 大洼县| 松滋市| 屯昌县| 宽甸| 江华| 两当县| 资中县| 绥化市| 宁南县| 泰和县| 佛坪县| 新沂市| 响水县| 崇州市| 固原市| 探索| 无为县| 巴林左旗| 海口市| 沾化县| 闽清县| 克东县| 巴林右旗| 阿瓦提县| 台湾省| 陇川县| 屯昌县| 五台县| 乌兰县| 蒲江县| 伊金霍洛旗| 松阳县| 白朗县| 安义县| 宜君县| 河津市| 大冶市| 西安市| 湾仔区| 新疆|