windows下搭建Nexus3私服和基於IDEA15的Maven學習筆記

Maven是一款依賴管理框架,能夠很方便的管理你的jar包依賴和項目依賴。java

簡單來講就是隻須要你添加一個jar包的配置,就會自動幫你下載所須要的jar包,而maven中央倉庫裏面會維護不少jar包在裏面,若是你想要的jar包有的話那麼就會自動下載下來。spring

可是作爲一個公司來講,常常會遇到有些jar包並不在中央倉庫,或者說項目之間互相依賴,而本身的項目jar包確定也是隻有本身公司用獲得。這時候通常就會選擇搭建一臺Nexus服務器,來管理全部用到的jar包,方便公司內部同志從上面下載,或者把本身的jar包給放上去給別的項目使用。服務器

本文就是一步步展現如何安裝配置一天nexus服務器,而且如何配置maven,讓你的maven來從這臺服務器上上傳和下載jar包。框架

搭建Nexus私服。eclipse

首先去官網下載window下用的zip文件。https://www.sonatype.com/download-oss-sonatypemaven

解壓以後包含下面兩個文件post

進入nexus下面的bin目錄測試

在cmd命令下,執行nexus.exe /run,就能夠啓動成功了。url

另外nexus.vmoptions是nexus的配置文件裏面能夠修改數據的存儲路徑。插件

我這裏把路徑修改成nexus-data.

重啓nexus,而後目錄下就多出了一個nexus-data文件,而且和以前解壓出來的sonatype-work是同樣的,可見以前的sonatype-work文件就是用來存儲nexus數據的。

 

nexus-3.1.0-04\etc目錄下的nexus-default.properties文件是用來配置。修改IP、端口、訪問根目錄的。配置成你想要的數據以後

再啓動nexus,而後就能夠訪問http://127.0.0.1:8091/nexus-console/

安裝成功後默認帳戶是admin具備所有權限默認密碼admin123

登陸以後咱們就能夠配置咱們的倉庫。

其中central庫的類型是proxy,裏面的URL是maven中央存儲庫,http://repo1.maven.org/maven2/。

Public 庫的類型是group。這說明public庫是一個組,而組裏面是能夠把你須要的庫給配置進去。

 

而release庫和snapshots庫,都是host類型的,也就是咱們自定義庫。其中release庫放的是穩定版本的jar,snapshots庫是放置快照版本的jar。稍後咱們會解釋release和snapshots之間的區別。

下面咱們配置一個本身本地庫,用來放置一些咱們本身第三方jar包,實際上大部分的jar包都是能夠在公共庫裏面找到的,因此我就本身隨便找一個jar爲例子。

 

下面咱們先建立一個host類型的庫,做爲咱們本地庫。

 

而後輸入你想要的名字就好了,其餘的配置基本不須要改變。

 

配置完成後,列表裏面就會把你的那個庫給顯示出來。

下面咱們嘗試向這個第三方庫裏面上傳jar包。咱們要把D盤下面的ojdbc-6.jar給上傳到咱們的maven thirdParty庫裏面

Nexus2系列裏面是能夠在圖形用戶界面直接上傳jar的,可是在nexus3裏面,我並無找到怎麼上傳,網上也沒有,因此咱們姑且用命令上傳吧。

首先在你的maven配置文件裏面,\conf\settings.xml裏面配置服務器的信息

 

而後cmd執行以下命令,別直接拷貝由於爲了方便閱讀我給換行了。Cm窗口下你要寫成一行。

mvn deploy:deploy-file

-DgroupId=com.test

-DartifactId=ojdbc

-Dversion=6

-Dpackaging=jar

-Dfile=D:\ojdbc-6.jar

-Durl=http://127.0.0.1:8091/nexus-console/repository/maven-thirdParty/

-DrepositoryId=nexus

這裏面url必定要注意,ip和端口就再也不解釋了,nexus-console必須和你在nexus-3.1.0-04\etc目錄下的nexus-default.properties這個文件裏面配置的nexus-context-path對應,repository是固定的,nexus3裏面就用這個,而nexus2裏面用的是content\repositoris,maven-thirdPary是你的庫的名字,另外後面的/也是必不可少的。

上傳以後咱們就能夠在本身nexus私服看到了。

---------------------------------------------------------------------

下面咱們開始嘗試把剛纔上傳的那個jar包,作爲第三方庫給拉下來。

我用的IDE是IDEA15,裏面的maven須要在settting裏面配置一下,eclipse相應的也須要配置一下。

既然咱們須要去服務器上把咱們的jar包給拉下來,那麼確定是要把jar包對應的路徑給maven指示出來。

這裏有兩種方式

第一種是配置在Pom 文件裏面,放在project節點下面就行了。

配置在setting.xml裏面,這樣的話就使用該maven的全部項目。須要放在profile下面

爲了讓着profile有效咱們還須要配置。(這個配置,若是你只有一個repository的話,activeProfiles應該是能夠不配置的,我測試過,沒有這個配置仍然有效。)

目前這種狀況下,若是咱們私服上找不到仍是回去中央庫找的。那咱們如何讓maven只在本地庫找呢?

這就須要在setting.xml裏面配置mirrors,而後再repository裏面把id配置爲central,這樣id爲central的配置會覆蓋maven的base pom的默認配置。這時候profile配置的url其實已經沒有什麼意義了,配置倉庫和插件倉庫的主要目的是,控制release和snapshot版本是否可用。當maven須要下載構件的時候,會先去訪問central的配置,查看是否支持下載快照或者是release版本。當獲得確定的回覆的時候,就會走mirrors的配置,因此倉庫本身的路徑其實已經沒什麼用,配置成什麼均可以。

咱們如今嘗試下是否能下載下來。

用IDEA新建一個common的maven項目,就叫common,pom文件添加以下配置。

而後maven自動就會把該jar包下載到本地。另外須要注意的是,對於maven2,和3,modelVersion都是4.0.0

 

而後咱們能夠對common項目打包,默認是打包爲jar。

運行mvn clean package,目的是把代碼打包到package。咱們能夠直接運行在項目目錄下運行

Mvn clean package,這行命令的意思就是把該項目打包,根據pom文件裏面的packaging字段的類型來打包,咱們先打包成jar(不配置默認就是打包成jar)。

這樣的話,咱們的jar包就被打包到target目錄下了,而這時候咱們的本地庫仍是沒有的,那麼假設咱們還有別的maven項目要依賴這個jar包,仍是找不到的,這時候,咱們就須要運行mvn clean install。

這樣的話,咱們的本地庫就是有這個,那別的項目配置上依賴,就能夠引用這個jar包了。找個稍後演示。

下面我大體解釋下,maven命令的生命週期。

首先你們看下,我執行mvn clean install時候的控制檯。

從截圖咱們能夠看出,maven的命令,其實就是執行某個插件的某個方法,好比

Clean命令就是執行了clean插件下的clean方法,效果是刪除了target目錄下全部的文件。

可是咱們明明沒有執行過compile命令,爲何也調用到了compile:compile方法呢?這就是跟maven的生命週期有關了。

 

生命週期實際上是一個抽象出來的概念,咱們在一個項目中,常常須要進行,編譯,測試,打包,部署,等等一系列的動做。好比有時候咱們須要打包,那麼咱們至少要先進行編譯吧,maven就把這些動做抽象爲不一樣的生命週期,在每個生命週期裏面,都定義好了步驟(至關於一個抽象類),而插件就是用來實現具體邏輯的,就是實現這個抽象類。這樣就能夠方便的經過配置插件來實現構建的行爲,甚至能夠本身書寫插件來實現某些特殊的需求。

 

Maven是有3套獨立的生命週期的生命週期。

Clean生命週期的目標是清理項目,包含:

1 Pre-clean  

2 Clean  

3 Post-clean  

Default 生命週期,是構建的核心階段,包括

  1. validate
  2. initialize
  3. generate-sources
  4. process-source
  5. generate-resource
  6. process-resource
  7. compile
  8. process-class
  9. generate-test-sources
  10. process-test-sources
  11. generate-test-resources
  12. process-test-resources
  13. test-compile
  14. process-test-classes
  15. test
  16. prepare-package
  17. package
  18. pre-integration-test
  19. integration-test
  20. post-integration-test
  21. verify
  22. install
  23. deploy

    site 生命週期,主要是創建站點和發佈的。

  1. pre-site
  2. site
  3. post-site
  4. site-deploy

這三個生命週期是獨立的,互不影響的,而生命週期自己是從上到下的。

好比,你只執行clean命令,那麼實際執行的是pre-clean 和 clean兩個動做。

你執行compile命令,執行的是Default 1~7全部的動做。

而只執行compile的話,是不會觸發clean相關的動做的。

這也就解釋了爲何咱們一條命令會有那些動做的緣由了。

下面說下,聚合跟繼承。

 

首先說聚合,當咱們項目中有多個子項目,而且這些子項目又須要同時構建的話,那咱們就須要在每個目錄下面執行mvn install命令。

這樣工做就比較重複,咱們能夠經過聚合來實現只執行一條命令,就同時構建多個項目。

 

而後再說繼承。

就和java同樣,若是有兩個很類似的類,裏面又有大量相同的代碼,那咱們會把相同的部分抽出來成爲一個父類同樣。Maven也能夠有這種結構,這樣就可省卻大量的配置。

首先咱們新建一個maven項目pom_base,因爲這是一個用來被繼承的maven項目,因此並不須要有什麼代碼,只須要一個pom文件

而後咱們在common的pom裏面繼承parent。注意,packaging必定要是pom類型的

這時候能夠看到,pom是有報錯的,報錯以下:

報錯緣由是,common在本地庫並無找到咱們pom_base項目的pom文件。這時候咱們有兩個解決方案。

  1. 根據報錯能夠看出來,咱們只須要配置<relativePath></ relativePath>標籤,指明parent的具體位置就好。
  2. 把pom_base給install到本地庫就好。(咱們系統就是採用這種方式)。

咱們項目其實不少子項目都繼承pom_base.

另外這裏面再解釋一個標籤,以pom_base爲例子。就是定義變量,好比對於spring不少依賴版本是同樣的,那麼就能夠把這些版本抽出來成爲一個變量,這樣的話,改起來的話只須要改這個變量的值就行了。

 

而後咱們新建第三個項目,springStudy(名字忽略)

而後依賴common,繼承pom_base.

這樣咱們就基本模擬瞭如今的項目結構。

好比,vst_front會依賴vst_common同時再繼承vst_pom_base.

最後再說一下怎麼樣發佈到咱們nexu私服上。爲了發佈到服務器上,首先要在pom配置

 

而後在setting.xml配置server信息,由於默認的訪問權限是隻讀的,你是不能發佈到到nexus上的,因此要配上管理員權限的server(前文有說過怎麼配置)。咱們能夠把上面的配置在pom_base裏面,這樣咱們的三個項目就均可以放到nexus上了,不須要每一個pom都配置一遍。

爲了都嘗試下,我comm放的是snapshot版本,springStudy放的是release版本

而後執行mvn deploy,遺憾的是報錯了,沒有被受權,這是由於我以前配置server的時候只配置了一個server,id是nexus

因此我把id改成nexus就行了

這樣就上傳上去了

最後再解釋下 snapshot和release的區別。自己就理解的請忽略。

舉個例子,若是A,B兩人協做, A開發common,B開發springStudy。A開發完common,若是B須要用A新開發的代碼,那麼假設,A傳到nexus上的版本是1.0,那麼就算他的代碼改動了B那邊也不會把這個新的1.0給下載到本地庫的,由於對於B來講他認爲新上傳的1.0和之前的1.0沒區別。這時候爲了告訴B兩個是不同的,A須要把pom版本改成2.0而後再deploy,假設頻繁修改代碼,就須要頻繁的改動pom文件。而SPANPSHOT版本能夠解決這個問題,這時候A只須要把pom文件裏面的版本改成1.0-SNAPSHOT這時候當他deploy到nexus上的時候,jar包後面會自動跟上一個時間戳,以下面的例子同樣。這時候B那邊就知道它本地庫的和nexus上的是不同的,能夠去nexus上把最新的版本更新下來了。

相關文章
相關標籤/搜索