用Nexus作Maven私服全攻略

 Nexus簡介html

Nexus是Sonatype推出的強大Maven倉庫管理器產品,要比之前TSS上介紹的Artifactory要好使用的多,也是一個拆箱即用的Java App,內嵌Jetty容器和Java Wrapper作Windows服務,安裝簡單到解壓而後雙擊install便可。更詳細的幫助手冊請上官方網站查看,這裏推薦一個翻譯中的書籍——《Maven權威指南》(在線閱讀英文版中文版),一本全面介紹Maven的書,其中也有介紹Nexus的章節,猛擊這。Nexus的優勢這裏得囉嗦一下(摘抄自Maven中文Blog):java

  • 代理遠程倉庫。配置Nexus代理中央倉庫,其它任何公開的Maven倉庫,將你組織內部的Maven配置指向Nexus,這樣全部構件都將從Nexus下載,若是Nexus沒有你要的構件,它會自動先去外部倉庫下載到本地,僅一次。
  • 本地宿主倉庫。Nexus能夠在服務器上創建本地的宿主倉庫,你能夠往這個倉庫裏提交任意的Maven規範構件,包括不能從公開倉庫下載到的構件,或者你組織內部產生的構件。
  • 倉庫組。有了倉庫組,你就能將不少倉庫聚合起來,對外公開一個統一的接口提供構件服務。
  • 構件搜索。Nexus能下載遠程的倉庫索引,並在本地構件本身的倉庫索引,有了該索引,你就能很快速方便的搜索任何你感興趣的構件。
  • 事情RSS源。Nexus服務器上發生的幾乎任何事情,你都能用RSS監視,方便管理。
  • Release和Snapshots區分。配置Nexus提供Release構件服務或者Snapshots服務,能更清晰的管理構件。
  • 路由。Nexus的路由可以管理爲特定的請求提供特定的倉庫。加入你在一個組中配置了不少倉庫,一條路由可以極大提升某些特定請求的響應速度。
  • 上傳構件。使用Nexus你能很方便的在web界面上上傳一些特殊的構件至倉庫。
  • 高用戶體驗的UI。使用AJAX和REST技術開發的Nexus,在界面上爲提供了很溫馨的用戶體驗。

    初始化

默認安裝後的訪問路徑爲http://localhost:8081/nexus/, 管理員登陸爲admin/admin123,UI是用Ext搭建的,熟悉Ext的人根本沒有操做障礙,登陸後最重要的事情就是打開遠程索引下載,操做爲選 擇菜單Administrator->Repositories,而後在右邊打開的列表中依次選擇type字段爲proxy的記錄,在下方的編輯區 中修改"Download Remote Indexes"值爲true,再從這三個倉庫上點右鍵選擇"Re-Index",這一步別忘,我當時搭建的時候就忘了Re-Index,結果等了一天還 沒任何索引文件。Re-Index後,Nexus會從後臺去官方地址下載倉庫索引文件,大概20M大小,根據網速快慢下載相應時間後選擇倉庫時會以樹形目 錄的方式顯示倉庫內容。web

nexus

角色權限sql

Nexus的操做權限徹底仿照RBAC角色權限模型,默認三個用戶:admin、anonymous、deployment,對應的是管理用戶、匿 名訪問用戶和部署用戶,管理用戶用於倉庫管理和系統配置,匿名用戶用於倉庫查詢和倉庫下載,部署用戶用於私人jar包的上傳。在這裏,我對 deployment的默認角色Nexus Deployment Role作了自定義修改,加入了"All M2 Repositories"的create和update權限,而且加入了"UI:Base UI Privaties"權限,用意稍後解釋。apache

Nexus的使用瀏覽器

  1. 從瀏覽器裏打開訪問地址後,經過"Artifact Search"菜單能夠進行構件搜索。
  2. 對於一些特殊的構件,好比sqlserver2005的jdbc驅動,你能夠經過管理員登陸而後從第三方上傳構件
  3. 提供倉庫組的概念,對於遠程代理倉庫和本地宿主倉庫,還有第三方倉庫,所有建立爲一個public-group,而後經過訪問組就能夠訪問全部的倉庫構件了,這就是所謂的分散存儲,統一訪問
  4. 和Maven結合也很簡單,首先是要配置Maven,打開$user$/.m2/下的settings.xml(沒有的話建立一個),而後拷貝如下內容到文件中:settings.xml

 

<settings>
  <proxies>
    <proxy>
      <id>normal</id>
      <active>true</active>
      <protocol>http</protocol>
      <username>deployment</username>
      <password>deploy</password>
      <host>localhost:8081/nexus</host>
      <port>80</port>
      <nonProxyHosts>localhost:8081/nexus</nonProxyHosts>
    </proxy>
  </proxies>

  <mirrors>
    <mirror>
      <!--This is used to direct the public snapshots repo in the 
          profile below over to a different nexus group -->
      <id>nexus-public-snapshots</id>
      <mirrorOf>public-snapshots</mirrorOf>
      <url>http://localhost:8081/nexus/content/groups/public-snapshots</url>
    </mirror>
    <mirror>
      <!--This sends everything else to /public -->
      <id>nexus</id>
      <mirrorOf>*</mirrorOf>
      <url>http://localhost:8081/nexus/content/groups/public</url>
    </mirror>
  </mirrors>
  
  <profiles>
    <profile>
      <id>development</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>
    <profile>
      <!--this profile will allow snapshots to be searched when activated-->
      <id>public-snapshots</id>
      <repositories>
        <repository>
          <id>public-snapshots</id>
          <url>http://public-snapshots</url>
          <releases><enabled>false</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </repository>
      </repositories>
     <pluginRepositories>
        <pluginRepository>
          <id>public-snapshots</id>
          <url>http://public-snapshots</url>
          <releases><enabled>false</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>development</activeProfile>
  </activeProfiles>
</settings>

 

而後,在從你的工程裏的pom.xml中加入如下內容:服務器

<distributionManagement>
	<repository>
		<id>repo</id>
		<name>public</name>
		<url>http://localhost:8081/nexus/content/repositories/releases</url>
	</repository>
	<snapshotRepository>
		<id>Snapshots</id>
		<name>Snapshots</name>
		<url>http://localhost:8081/nexus/content/repositories/snapshots</url>
	</snapshotRepository>
</distributionManagement>
  1. 解釋一下:
    settings.xml中的proxies/proxy節點配置的是部署服務器訪問屬性,deployment/deploy對應的是部署用戶名和密 碼;mirrors/mirror配置的是maven訪問倉庫的地址,這裏使用的是Nexus提供的羣組概念,將多個倉庫組成一個public- group的方式進行訪問;profiles/profile則主要用來描述倉庫部署的訪問配置。app

和apache結合

和apache結合掛域名訪問也很簡單,官方網站上有介紹,我這裏給出一種最簡單的方式:maven

  1. 啓用mod_proxy.so、mod_proxy_ajp.so、mod_proxy_connect.so三個module
  2. 配置一下數據:
ProxyRequests Off 
ProxyPreserveHost On

    3. 虛擬主機的配置相似下面ide

ServerName repo.duduwolf.com
    ServerAdmin duduwolf@duduwolf.com
    ProxyPass / http://localhost:8081/nexus
    ProxyPassReverse / http://localhost:8081/nexus
    ErrorLog logs/nexus-error.log
    CustomLog logs/nexus-access.log common

其餘相似產品

  • 著名的Artifactory,這是TSS推薦過的,也是最先的倉庫管理軟件
  • Apache的Apache Archiva,apache出品的應該不錯,不過沒用過,我以爲自此有了Nexus,你徹底不必在尋找其餘倉庫管理軟件了。
相關文章
相關標籤/搜索