Maven and Nexus2

Maven and Nexus2

Maven是什麼?

  • 構建工具: 經過簡單的命令,可以完成清理、編譯、測試、打包、部署等一系列過程。同時,不得不提的是,Maven是跨平臺的,不管是在Windows、仍是在Linux或Mac上,均可以使用一樣的命令。html

  • 依賴管理工具:java

    項目依賴的第三方的開源類庫,均可以經過依賴的方式引入到項目中來。代替了原來須要首先下載第三方jar,再加入到項目中的方式。從而更好的解決了合做開發中依賴增多、版本不一致、版本衝突、依賴臃腫等問題。node

  • 項目信息管理工具: 可以管理項目描述、開發者列表、版本控制系統地址、許可證等一些比較零散的項目信息。除了直接的項目信息,經過Maven自動生成的站點,以及一些已有的插件,還可以輕鬆得到項目文檔、測試報告、靜態分析報告、源碼版本、日誌報告等很是具備價值的項目信息。linux

Maven V·S Nexus

這個問題從Maven的第二個用處提及,依賴管理,經過在Pom中指定座標的形式將jar引入到項目中。那這個過程,要經歷怎樣一個流程呢?從哪裏尋找jar?下載的jar放到哪裏?git

將這個問題順下來,就知道nexus和maven的關係了。web

從哪裏找到jar?項目用到的jar又存放在哪裏?這引出了倉庫的概念,maven經過倉庫來統一管理各類構件。Maven的倉庫分爲本地倉庫和遠程倉庫。apache

20180928153813408874285.png

當Maven根據座標尋找構件時,它首先會查看本地倉庫,若是本地倉庫存在此構件,則直接使用;若是本地倉庫不存在此構件,或者須要查看是否有更新的構件版本,Maven會去遠程倉庫查找,發現須要的構件以後,下載到本地倉庫再使用。npm

20180928153813411863911.png

到了這裏,問題的答案也就出來了。vim

首先,Nexus是一種遠程倉庫,根據上段的介紹,咱們已經知道遠程倉庫的做用。在遠程倉庫中,默認的是中央倉庫,中央倉庫是Maven核心自帶的遠程倉庫。那就使用中央倉庫不就得了嗎,爲何咱們要安裝Nexus呢?centos

咱們從項目實際開發來看:

  1. 若是沒有私服,咱們所需的全部構件都須要經過maven的中央倉庫和第三方的Maven倉庫下載到本地,而一個團隊中的全部人都重複的從maven倉庫下載構件無疑加大了倉庫的負載和浪費了外網帶寬,若是網速慢的話,還會影響項目的進程。
  2. 不少狀況下項目的開發都是在內網進行的,鏈接不到maven倉庫怎麼辦呢?開發的公共構件怎麼讓其它項目使用?這個時候咱們不得不爲本身的團隊搭建屬於本身的maven私服,這樣既節省了網絡帶寬也會加速項目搭建的進程,固然前提條件就是你的私服中擁有項目所需的全部構件。
  3. 爲了節省帶寬和時間,在局域網內架設一個私有的倉庫服務器,用其代理全部外部的遠程倉庫。當本地Maven項目須要下載構件時,先去私服請求,若是私服沒有,則再去遠程倉庫請求,從遠程倉庫下載構件後,把構件緩存在私服上。這樣,及時暫時沒有Internet連接,因爲私服已經緩存了大量構件,整個項目仍是能夠正常使用的。同時,也下降了中央倉庫的負荷。

20180928153813437032303.png

Nexus僅僅是私服的一種。

經過上面說明若是還不能理解maven和nexus是什麼,能夠對比一下yum倉庫以及本地yum源,maven只不過是將/etc/yum.repos.d/*.repo源換作項目中的pom.xml調用的jar源。

安裝及配置

安裝Maven

在centos7系統安裝maven很簡單,直接使用yum安裝就能夠,不過在安裝maven以前首先要配置系統的 JDK (java)環境。春雨使用ansible進行部署,對應的role是 maven

playbook:

$ cat maven.yml
---
- hosts: ucloud
  gather_facts: False
  roles:
    - role: maven

使用方法:

$ ansible-playbook maven.yml

安裝Nexus

官方建議 服務器硬件配置:

  • CPU:≥4核
  • memory:≥4G (do not set max heap size larger than 4GB
  • fd:65536

安裝依賴

  • Java 8
  • maven
  • npm

Java和maven在上面的過程已安裝,接下來只須要安裝npm,步驟以下:

# 安裝以前先建立對應的目錄
$ mkdir /home/node
$ cd /home/node

# 使用nodejs管理npm
$ wget https://nodejs.org/dist/v8.12.0/node-v8.12.0-linux-x64.tar.xz

# 解壓
$ tar Jxvf node-v8.12.0-linux-x64.tar.xz
$ mv node-v8.12.0-linux-x64 nodejs

# 加入系統環境
$ ln -s /home/node/nodejs/bin/node /usr/bin/node
$ ln -s /home/node/nodejs/bin/npm /usr/bin/npm

# 升級npm
$ npm install npm@latest -g

安裝Nexus2

$ cd /usr/local/
$ wget https://download.sonatype.com/nexus/oss/nexus-2.13.0-01-bundle.tar.gz
$ tar xvzf nexus-2.13.0-01-bundle.tar.gz
$ ln -s nexus-2.13.0-01 nexus
## nexus-2.13.0-01:應用目錄
## sonatype-work:數據目錄,存放全部的repo

# 啓動
$ cd /usr/local/nexus/bin/
$ ./nexus start
****************************************
WARNING - NOT RECOMMENDED TO RUN AS ROOT
****************************************
If you insist running as root, then set the environment variable RUN_AS_USER=root before running this script.

$ vim /usr/local/nexus/bin/nexus
RUN_AS_USER=root

$  ./nexus start 
****************************************
WARNING - NOT RECOMMENDED TO RUN AS ROOT
****************************************
Starting Nexus OSS...
Started Nexus OSS.

$ tail -f /usr/local/nexus/logs/wrapper.log

啓動成功後在瀏覽器訪問(localhost:8081/nexus/):http://192.168.228.130:8081/nexus/ ,進入web界面

20181009153910077425615.png

使用管理員用戶登陸,帳號:admin 密碼:admin123。若是使用sonatype管理用戶和密碼,能夠經過設置——change password來更改密碼,若是集成了ldap用戶,則沒法經過此方法更改密碼。

  • 系統優化:

    sonatype須要配置系統文件描述符數量爲 65536,配置方法以下:

    # 查看當前系統可打開文件描述符數量
    $ ulimit -n
    
    # 修改文件描述符數量
    ## 臨時修改
    $ ulimit -n 65535
    ## 永久修改
    $ vim /etc/security/limits.conf
    nexus - nofile 65536

    若是 加入了systemd管理 nexus,上述方法是不生效的,配置方法以下:

    # 加入systemd管理
    $ vim /usr/lib/systemd/system/nexus.service
    [Unit]
    Description=nexus service
    After=network.target
    
    [Service]
    Type=forking
    LimitNOFILE=65536
    ExecStart=/usr/local/nexus/bin/nexus start
    ExecStop=/usr/local/nexus/bin/nexus stop
    Restart=on-abort
    
    [Install]
    WantedBy=multi-user.target

    管理nexus服務:

    $ systemctl daemon-reload
    $ systemctl start nexus

集成ldap

20181010153910124649981.png

Nexus管理

Nexus倉庫類型
  • hosted 宿主倉庫:主要用於部署沒法從公共倉庫獲取的構件(如 oracle 的 JDBC 驅動)以及本身或第三方的項目構件;
  • proxy 代理倉庫:代理公共的遠程倉庫;
  • virtual 虛擬倉庫:用於適配 Maven 1;
  • group 倉庫組:Nexus 經過倉庫組的概念統一管理多個倉庫,這樣咱們在項目中直接請求倉庫組便可請求到倉庫組管理的多個倉庫。

20181009153909089499206.png

倉庫常見操做
  • 修改默認存儲路徑
  • 同步索引
  • 修改遠程同步地址爲aliyun鏡像地址

代理maven-proxy

  • 更改maven配置 編輯maven的settings.xml文件,更改mirror、profile、activeProfiles模塊的內容以下:

    $ vim /etc/maven/settings.xml
    <settings>
      <mirrors>
    	<mirror>
      	<!--This sends everything else to /public -->
      	<id>nexus</id>
      	<mirrorOf>*</mirrorOf>
      	<url>http://localhost:8081/repository/maven-proxy/</url>
    	</mirror>
      </mirrors>
      <profiles>
    	<profile>
      	<id>nexus</id>
      	<!--Enable snapshots for the built in central repo to direct -->
      	<!--all requests to nexus via the mirror -->
      	<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>
      </profiles>
      <activeProfiles>
    	<!--make the profile active all the time -->
    	<activeProfile>nexus</activeProfile>
      </activeProfiles>
    </settings>
  • 進入web,配置nexus: 2018101015391861131094.png

  • 在項目中調用(pom.xml):http://maven.apache.org/guides/mini/guide-mirror-settings.html

參考資料

https://www.sonatype.com/

https://help.sonatype.com/repomanager2

http://www.mdslq.cn/archives/d406f18d.html

相關文章
相關標籤/搜索