1. 程式人生 > 實用技巧 >全面講解maven的setting.xml的配置nexus資訊

全面講解maven的setting.xml的配置nexus資訊

讓maven專案使用nexus作為遠端倉庫有兩種方式,

第一種是在專案的pom.xml中進行更改,讓單個專案使用nexus倉庫;

另一種是通過修改maven的配置檔案settings.xml進行更改,讓所有專案都使用nexus倉庫。

1.Maven將本地專案釋出到Nexus私服

需要再setting檔案中配置伺服器資訊

<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>

id:這是Server的ID(不是登入進來的user),與Maven想要連線上的repository/mirror中的id元素相匹配。

username,password:這兩個元素成對出現,表示連線這個server需要驗證username和password。在nexus中,預設管理員使用者名稱為admin,密碼為admin123。

這裡使用兩個伺服器配置,分別對應release和snapshot。

2.在pom.xml中配置

    <!--使用分發上傳將專案打成jar包,上傳到nexus私服上-->
    <distributionManagement>
        <!--釋出版本倉庫-->
        <repository>
            <!--nexus伺服器中使用者名稱:在settings.xml中和<server>的id一致-->
            <id>releases</id>
            <!--自定義名稱-->
            <name>RELEASES PUBLISH</name>
            <!--倉庫地址-->
            <url>http://xx.xx.xx.xx:xxxx/repository/maven-releases/</url>
        </repository>
        <!--快照版本倉庫-->
        <snapshotRepository>
            <!--nexus伺服器中使用者名稱:在settings.xml中和<server>的id一致-->
            <id>snapshots</id>
            <!--自定義名稱-->
            <name>SNAPSHOTS PUBLISH</name>
            <!--倉庫地址-->
            <url>http://xx.xx.xx.xx:xxxx/repository/maven-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

  

3.執行mvn 命令

mvn clean deploy

  

注意: 專案名稱中帶有shapshot的會發到快照庫,否則則會部署到發行庫

2.從nexus拉取依賴

需要再setting檔案配置

<profile>
      <id>nexusProfile</id>
      <repositories>
        <repository>
		<id>xx</id>
		<name>111</name>
		<url>http://localhost:8081/nexus/content/groups/public/</url>
		<snapshots>
			<enabled>true</enabled>
		</snapshots>
		<releases>
			<enabled>true</enabled>
		</releases>
		<layout>default</layout>
	</repository>
      </repositories>
    </profile>

  

<activeProfiles>
	<!--激活了才生效-->
	<activeProfile>nexusProfile</activeProfile>
</activeProfiles>

注:啟用來才會生效  

整體的setting配置,可供參考

<?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">
  <!--指定本地倉庫儲存路徑。預設值為~/.m2/repository 即 ${user.home}/.m2/repository。 -->
  <localRepository>d:/.m2/repository</localRepository>
 
    <!--指定Maven是否需要和使用者輸入進行互動。true:需要與使用者互動;false:使用一個合理的預設值。預設值為true。 -->
  <interactiveMode>true</interactiveMode>
 
  <!--指定是否使用plugin-registry.xml檔案來管理外掛版本。設為true表示使用。預設值為false。-->
  <usePluginRegistry>false</usePluginRegistry>
 
  <!--指定是否在離線模式下執行。設為true表示專案構建要在離線模式下執行,預設值為false。 -->
  <offline>false</offline>
 
    <!-- 指定外掛groupId列表,用於搜尋時外掛的groupId沒有明確規定。 -->
    <pluginGroups>
         <!-- 指定使用外掛查詢進一步的組識別符號 -->
        <pluginGroup>com.micmiu.plugins</pluginGroup>
    </pluginGroups>
 
  <!-- 指定這臺機器連線到網路的代理伺服器的列表。除非另有規定(系統屬性或命令列開關),
       列表中配置的第一代理將被啟用使用。-->
  <proxies>
    <!-- 配置代理伺服器的相關引數 -->
    <proxy>
        <!-- 代理標識ID,預設值:default -->
      <id>micmiuProxy</id>
      <!-- 指定是否啟用,預設值:true -->
      <active>true</active>
      <!-- 指定代理協議,預設值:http -->
      <protocol>http</protocol>
      <!-- 指定代理認證的使用者名稱 -->
      <username>micmiu</username>
      <!-- 指定代理認證使用者的密碼 -->
      <password>mypwd</password>
      <!-- 指定代理伺服器的主機名 -->
      <host>micmiu.com</host>
      <!-- 指定代理服務的埠 預設值:8080 -->
      <port>80</port>
      <!-- 指定不被代理的主機名列表。多個用|分隔。-->
      <nonProxyHosts>ctosun.com|ctosun.micmiu.com</nonProxyHosts>
    </proxy>
  </proxies>
 
  <!-- 這是一個認證配置的列表,系統內部根據配置的serverID使用。認證配置用於maven連結到遠端服務-->
  <servers>
    <!-- 指定的身份認證資訊用於連線到一個特定的伺服器時,確定系統內的唯一的名稱(簡稱下面的'id'屬性)。-->
    <server>
        <!-- 這是server的id(注意不是使用者登陸的id)。該id與distributionManagement中repository元素的id必須要匹配。-->
      <id>micmiu-releases</id>
      <!-- 伺服器認證的使用者名稱 -->
      <username>michael</username>
      <!-- 伺服器認證的使用者對應的密碼 -->
      <password>mypwd</password>
    </server>
 
    <!-- 另一個示例 私鑰/密碼 -->
    <server>
      <id>micmiu-snapshots</id>
      <!-- 認證時使用的私鑰檔案。 -->
      <privateKey>/home/micmiu/.ssh/id_dsa</privateKey>
      <!-- 認證時使用的私鑰密碼,沒有密碼就設為空 -->
      <passphrase>mypwd</passphrase>
      <!-- 目錄被建立時的許可權設定。其值對應了unix檔案系統的許可權,如664,或者775 -->
      <directoryPermissions>775</directoryPermissions>
      <!-- 倉庫檔案建立時的許可權設定。其值對應了unix檔案系統的許可權,如664,或者775。 -->
      <filePermissions>664</filePermissions>
    </server>
  </servers>
 
  <!-- 指定映象列表,用於從遠端倉庫下載資源 -->
  <mirrors>
    <!-- 指定倉庫的映象站點,代替一個給定的庫。該映象藏庫有一個ID相匹配的mirrorOf元素。
         ID是用於繼承和直接查詢目的,必須是唯一的。-->
    <mirror>
        <!--該映象的唯一識別符號。id用來區分不同的mirror元素。 -->
      <id>mirrorId</id>
      <!--被映象的伺服器的id,比如:central,不能和id匹配。-->
           <mirrorOf>central</mirrorOf>
      <name>micmiu for dev.</name>
      <url>http://dev.micmiu.com/repo/maven2</url>
    </mirror>
 
  </mirrors>
 
  <!-- 這是一個可以在各種不同的方式啟用的配置檔案列表,並可以修改構建過程。在settings.xml中提供的資訊,
       旨在提供本地機器允許建立在本地環境中工作的具體路徑和庫位置。有多種方式可以啟用配置屬性:一種在settings.xml中<activeProfiles>指定;
       另一種實質上依賴於系統屬性,無論是匹配特定的屬性值或只是測試到它的存在.配置檔案也可以根據JDK版本的字首進行啟用,1.4 可以啟用1.4.2_07
    注:對於在settings.xml中定義的配置,你僅限於指定資源倉庫、外掛倉庫和用於外掛在POM中變數的自由形式屬性的定義 -->
  <profiles>
    <!-- 指定生成過程的介紹,使用一個或多個上述機制被啟用。對於繼承而言,啟用通過<activatedProfiles/>或命令列配置檔案,
         配置檔案必須有一個唯一的ID。此配置檔案的例子使用的JDK版本觸發啟用。-->
    <profile>
        <!--該配置的唯一識別符號。 -->
      <id>jdk-1.4</id>
 
            <!--自動觸發配置檔案的邏輯定義。Activation的邏輯配置決定了是否開啟該profile。activation元素並不是啟用profile的唯一方式。
                settings.xml檔案中的activeProfile元素可指定需要啟用的profile的id。
                profile也可以通過在命令列,使用-P標記和逗號分隔的列表來顯式的啟用 -->
      <activation>
          <!--指定是否啟用的標識 預設值為false-->
            <activeByDefault>false</activeByDefault>
 
          <!--當匹配的jdk被檢測到,profile被啟用。例如,1.4啟用JDK1.4,1.4.0_2,而!1.4啟用所有不是以1.4開頭的JDK版本。-->
        <jdk>1.4</jdk>
 
        <!-- 當檢測到匹配的作業系統屬性時,指定該配置檔案將被啟用, -->
           <os>
                 <!--啟用profile的作業系統的名字 -->
                 <name>windows 7</name>
                 <!--啟用profile的作業系統所屬家族(如 'windows')  -->
                 <family>windows</family>
                <!--啟用profile的作業系統體系結構  -->
                 <arch>x86</arch>
                 <!--啟用profile的作業系統版本-->
                 <version>6.1</version>
            </os>
 
            <!-- 檢測系統對應的屬性和值(該值可在POM中通過${屬性名稱}引用),配置就會被啟用。
                如果值欄位是空的,那麼存在屬性名稱欄位就會啟用 -->
            <property>
                 <!-- 屬性的名稱 -->
                 <name>mavenVersion</name>
                 <!-- 屬性的值 -->
                <value>3.0.4</value>
            </property>
            <!-- 通過檢測該檔案的是否存在來啟用配置。missing檢查檔案是否存在,如果不存在則啟用profile;exists則會檢查檔案是否存在,如果存在則啟用。-->
            <file>
                <!--如果指定的檔案存在,則啟用profile。 -->
                <exists>/usr/local/micmiu/workspace/myfile</exists>
                <!--如果指定的檔案不存在,則啟用profile。-->
                <missing>/usr/local/micmiu/workspace/myfile</missing>
            </file>
      </activation>
 
            <!-- 對應profile的擴充套件屬性列表。Maven屬性和Ant中的屬性一樣,可以用來存放一些值。這些值可以在POM中的任何地方使用標記${X}來使用,
                 這裡X是指屬性的名稱。屬性有五種不同的形式,並且都能在settings.xml檔案中訪問。
                       1. env.X: 表示系統環境變數。例如,"env.PATH" 等同於 $path環境變數(在Windows上是%PATH%)。
                      2. project.x:表示 POM中對應的屬性值。
                      3. settings.x: 表示 settings.xml中對應屬性值。
                      4. Java系統屬性: 所有可通過java.lang.System.getProperties()訪問的屬性都能在POM中使用該形式訪問。
                      5. x: 在<properties/>元素中,或者外部檔案中設定,以${someVar}的形式使用。 -->
             <properties>
              <user.blog>www.micmiu.com</user.blog>
          </properties>
 
    </profile>
 
    <!-- 這是另一個配置檔案,根據系統屬性來啟用 -->
    <profile>
        <!--該配置的唯一識別符號。 -->
      <id>env-dev</id>
      <activation>
        <property>
            <!-- 被用來啟用配置檔案的屬性的名稱 -->
          <name>target-env</name>
          <!-- 被用來啟用配置檔案的屬性的值 -->
          <value>dev</value>
        </property>
      </activation>
      <!-- 指定配置檔案的擴充套件配置 內容採取property.value的形式 -->
      <properties>
        <tomcatPath>/path/to/tomcat/instance</tomcatPath>
      </properties>
    </profile>
 
    <profile>
            <id>repo-dev</id>
            <!-- 配置遠端倉庫列表 -->
            <repositories>
                <!-- 遠端倉庫的配置資訊 -->
                <repository>
                    <!-- 遠端倉庫唯一標識-->
                    <id>nexus</id>
                    <!-- 遠端倉庫名稱 -->
                    <name>nexus for develop</name>
                    <!-- 遠端倉庫URL -->
                    <url>http://192.168.1.8:8080/nexus/content/groups/public/</url>
                    <layout>default</layout>
                    <releases>
                        <!--是否使用這個資源庫下載這種型別的構件 預設值:true-->
                        <enabled>true</enabled>
                        <!--指定下載更新的頻率。這裡的選項是:always(一直),daily(每日,預設值),interval:X(這裡X是指分鐘),或者never(從不)。 -->
                  <updatePolicy>daily</updatePolicy>
                  <!--當Maven驗證構件校驗檔案失敗時該怎麼做fail(失敗)或者warn(告警)。-->
                  <checksumPolicy>warn</checksumPolicy>
                    </releases>
                    <snapshots>
                        <!--是否使用這個資源庫下載這種型別的構件 預設值:true-->
                        <enabled>true</enabled>
                        <!--指定下載更新的頻率。這裡的選項是:always(一直),daily(每日,預設值),interval:X(這裡X是指分鐘),或者never(從不)。 -->
                  <updatePolicy>daily</updatePolicy>
                  <!--當Maven驗證構件校驗檔案失敗時該怎麼做fail(失敗)或者warn(告警)。-->
                  <checksumPolicy>warn</checksumPolicy>
                    </snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>nexus</id>
                    <name>local nexus</name>
                    <url>http://192.168.1.8:8080/nexus/content/groups/public</url>
                    <layout>default</layout>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
 
  </profiles>
 
  <!-- 指定被啟用的配置檔案-->
  <activeProfiles>
    <activeProfile>repo-dev</activeProfile>
  </activeProfiles>
</settings>

(1)各個節點的註釋都有,可以看一下

(2)在配置了mirrorof的映象後,並且mirrorof的規則是*的話,後面的profiles的repositories節點是沒有意義的,可以去掉,但是profile節點還可以配置其他很多東西,所以不影響此節點下其他的除了repositories之外ide節點的東西

(3)maven的映象從指定mirrorof的地址下載資源後,如果此地址沒有該資源,不會去maven的超級pom下的中央倉庫去下載資源,此時的nexus私服配置的有中央倉庫地址,此時nexus私服會去中央倉庫下,如果還沒有,則要另外從網上下載,並上傳到私服下