子工程将會內建父工程的對于部署到私服的配置;是以隻需要在父工程的pom配置即可;今天調試了半天deploy失敗,是因為distributeManagement僅是在hello-world中配置,parent工程沒有配置;
如果先要把工程釋出為relase版本,隻要把各個項目的配置檔案version修改為去掉"SNAPSHOTS"版本即可;如果parent/aggregate工程沒有設定distributeManagement相關内容deploy将會出錯,及時子工程配置了distributeManagement資訊;
為了項目建立獨立的repository,之後還要配置設定權限,首先是建立操作,在privilege中add一項,選擇已經建立的repository,target選擇maven2,這個将會建立該repository的maven倉庫的操作;其實target還有很多其他類型,在repository target中你可以看到,裡面有maven1倉庫操作權限,nuget倉庫操作全下,我們是基于maven2,是以選擇的是maven2(all)類型,還有一種是maven2(but source),指的是對除了資源檔案之外的元素的操作;
maven測試的插件叫:maven-surefire-plugin;這個插件的約定是:
1)src/test/java/下面;
2)類命名為Test*.java或者*Test.java、*TestCase.java
如果想要跳過測試,package指令:mvn package -DskipTests
Jekins和nexus一樣,都是内置了Jetty,不需要額外部署到tomcat中;直接在指令行中鍵入:java -jar jekins即可實作部署,預設端口是8080,打開浏覽器,敲入localhost:8080即可;
eclipse就是一個插件容器,比如svn其實是需要你安裝svn插件(site)才可以的;Eclipse工程上傳到svn上面,視圖切換到svn資源庫研究,右鍵svn資源庫的空白區域,建立,指定svn上傳路徑;然後回到Java視圖,選中所有的要上傳的工程,右鍵->Team->Share,逐個share清單中的項目即可;
在Maven裡面,POM配置relase以及snapshot版本部署到對應的server路徑,在maven的settings檔案中配置對應部署伺服器登入的資訊;pom不負責權限,隻是負責功能的配置,至于通路機器的使用者名密碼,配置檔案路徑在哪裡這些都是交給settings檔案,換言之,pom隻是負責項目相關的資訊(POM,是project object model的縮寫),和項目麼有間接關系的都放在settings檔案中定義;
mvn clean deploy失敗,後來發現是因為relase庫在nexus中配置為disable redeploy,導緻重複版本無法上傳到nexus中,但是Jekins中CI需要重複執行部署任務;修改配置為allow redeploy,問題解決;但是有一個問題需要考慮是否需要重複送出到nexus,其實CI隻要能夠保證package通過就可以了,更多的時候是不需要install的;是以nexus即使配置為disable也是有道理的;後來我把build的指令修改為clean install
在配置Jekins的時候,郵件發送總是不對,後來通過網調才發現,原來是因為在配置的上面有一個管理者郵件,一定要和你配置的smtp的使用者名,密碼配上才可以;
在配置Jenkins的時候注意,其中單個項目配置有一個是POM檔案路徑,如果有parent/aggregate工程,需要給出相對路徑,對于helloworld項目而言,它的填寫内容為parent-proj/pom.xml;因為Jenkins實際上和maven關聯很大,是以需要部署jenkins的機器也要安裝maven,因為配置jenkins的時候需要制定maven的路徑,讓jenkins可以調用maven元件進行編譯,測試,打包,部署,同僚還要為jenkins配置svn,讓jenkins可以下載下傳到最新的代碼,來讓maven插件來對代碼指定指令操作,jenkins本身其實也是一個"倒爺"的感覺,他所做的很多事情其實都是依賴于其他的元件;
Maven的私服其實本質是maven用戶端都連接配接到私服Nexus上面指定的虛拟倉庫(virtial repository),虛拟倉庫中包含了中央倉庫以及其他遠端倉庫,然後,maven的請求的元件如果已經被緩存到了私服倉庫,直接取用,如果不存在,則需要私服連接配接到遠端伺服器進行下載下傳,然後傳遞給maven用戶端;在私服的頁面搜尋的也是本地緩存,如果又将會傳回,如果沒有,檢索不出來,它并不會檢索遠端倉庫;
隻要在pom檔案中聲明一個建構,maven将會自動和私服取得聯系,下載下傳到本地倉庫(.m2/repository);
nexus windows安裝版本指令行 nexus install,不需要加短橫線之類的,直接敲指令;
maven執行指令其實應該是plugin-prefix:goal,比如maven-resources-plugin階段的resources(将main資源檔案複制到輸出目錄,對應的還有testResource目标),指令應該是mvn resources:resources;類似于compile這類的沒有歧義的指令可以不需要帶字首,但是對于一些非常用的指令可能需要;如果eclipse因為沒有探測到配置檔案變化而沒有複制,想要強制編譯複制配置檔案(資源檔案),那麼就可以在指令行敲一下這個指令;
maven的eclipse插件超智能,我在嵌入一個plugin的時候,artifactId寫錯了都被識别出來了;
maven預設的資源檔案是src/main(test/resourcs,注意是resources是複數形式;這樣每次編譯都回到target下面判斷是否需要拷貝資源檔案;之前使用了resource做包名,導緻隻有檔案本身變化了才會拷貝;
maven的生命周期以及插件綁定,maven主程式定義好了各個生命階段,clean-default(resource複制,編譯,測試,打包,部署到本地以及遠端倉庫)-site(專門針對網站),各個階段的任務則是由maven的插件來實作的,各個階段插件的配置在超級POM中已經設定(可以通過Ecliopse的Effective POM中看到),你可以修改和重寫在自己項目的POM中;各個階段任務被稱為目标(goal);一個插件可能會有多個目标,可以通過":"進行指定;比如上面提到的resources插件,再比如depandency插件有list,tree以及analyze目标;是以在代碼實作上,是公開的方法,在maven生命周期角度來看是目标;
Eclipse本身是一個平台,通過插件形式完成功能;同樣的,對于preference中的配置内容也都是各個插件的結果,比如安裝了maven插件後就會出現Maven的菜單項,同樣的配置資訊也是分散在各個插件中的配置檔案,在.meta/.plugins中搜尋.xml,可以看到很多xml檔案,還有很多插件是以其他檔案格式存儲配置項;是以preference中的配置内容不是儲存在一個檔案裡面,而是分散的儲存在各個插件的配置檔案中;
修改完了pom完之後,如果想要讓eclipse下載下傳pom中建立或者修改的的jar包,可以右鍵工程,maven,update project;
在eclipse中指定的maven的installation是為了指定bin檔案夾,裡面的各種maven指令将從這裡找到并執行,相當于指令行執行的指定環境變量(設定M2_HOME以及添加到PATH),在User Settings中指定配置檔案則是為了指定配置檔案路徑;一定要手動進行指定,不要使用預設項,因為如果eclipse之前使用過maven,配置檔案是其他,預設的路徑也是.m2/settings.xml,但是卻可能使用的是緩存的配置檔案;
POM裡面的三大基本部分:坐标(groupId,artifactId,version),依賴,建構資訊(plugins,sourceDirectory...);
在指令行視窗執行mvn clean install,卻被安裝到了e:\sipo...下面,原來指令行的mvn是環境變量中MAVN_HOME的bat檔案,取用的也是該目錄下的settings.xml檔案,是以會如此;