新項(xiàng)目開發(fā)的通常做法:項(xiàng)目經(jīng)理從團(tuán)隊(duì)抽調(diào)1名開發(fā)人員進(jìn)行項(xiàng)目工程框架的搭建,剩余的開發(fā)人員先研究項(xiàng)目需求,并著手準(zhǔn)備業(yè)務(wù)邏輯的設(shè)計(jì)。本地項(xiàng)目工程搭建后,上傳SVN或git配置庫,告知其他開發(fā)人員可以下載項(xiàng)目工程,啟動開發(fā)了。開發(fā)運(yùn)維人員便進(jìn)行代碼的編寫、編譯、測試以及打包等系列操作。我們將這一系列的操作稱為“構(gòu)建”。
構(gòu)建的實(shí)質(zhì)是將我們編寫的Java源文件、XML配置文件、HTML頁面、CSS和JS文件等,通過某種方式組合在一起,變?yōu)榭蓪ν夥?wù)項(xiàng)目的過程。同時,構(gòu)建過程中很多都是沒有技術(shù)含量且重復(fù)的工作,手工操作很無趣且太麻煩。最好能夠由手工模式轉(zhuǎn)變?yōu)樽詣踊J?,這樣可以大大節(jié)省時間。
構(gòu)建的工具主要有:
(1). Make;
(2). Ant(Another Neat Tool):另一個整潔的工具;
(3). Maven;
(4). Gradle;
本文將介紹在SDN控制器OpenDaylight中使用的Maven工具。
一、Maven
Maven是Apache組織中一個開源項(xiàng)目,主要用于基于Java平臺的項(xiàng)目構(gòu)建、依賴管理和項(xiàng)目信息管理。下面來看下其幾個核心概念:
1.坐標(biāo)
坐標(biāo)用于唯一標(biāo)識構(gòu)件(如jar,war等),坐標(biāo)的元素包括groupId、artificatId、version、packaging、classifier,其中前3個是必須定義的,后2個是可選的。
①groupId:定義當(dāng)前Maven項(xiàng)目隸屬的實(shí)際項(xiàng)目。
②artificatId:定義實(shí)際項(xiàng)目中的一個Maven項(xiàng)目(模塊),建議使用實(shí)際項(xiàng)目名稱作為其前綴。
③version:定義Maven項(xiàng)目當(dāng)前所處的版本。
④packaging:定義Maven項(xiàng)目的打包方式。
⑤classifier:幫助構(gòu)建輸出的一些附屬構(gòu)件。
2.生命周期
如前所述,軟件人員每天的工作:項(xiàng)目的清理、初始化、編譯、測試、打包、集成測試、驗(yàn)證、部署和站點(diǎn)生成等等,Maven對這些工作統(tǒng)一抽象為三個相互獨(dú)立的生命周期:clean、default和Site。其中,default生命周期的目的是構(gòu)建項(xiàng)目,而site生命周期的目的是建立項(xiàng)目站點(diǎn)。下面詳細(xì)說明每種生命周期:
(1).clean生命周期的目的是清理項(xiàng)目,包含三個階段:
①pre-clean執(zhí)行一些清理前需要完成的工作;
②clean清理上一次構(gòu)建生成的文件;
③post-clean執(zhí)行一些清理后需要完成的工作。
(2).default生命周期的目的是構(gòu)建項(xiàng)目,定義構(gòu)建時所需要執(zhí)行的所有步驟:
其中重要階段的解釋如下:
(3). pre-site的目的是建立項(xiàng)目站點(diǎn),包含3個階段:
①site生成項(xiàng)目站點(diǎn)文檔;
②post-site執(zhí)行一些在生成項(xiàng)目站點(diǎn)之后需要完成的工作;
③site-deploy將生成的項(xiàng)目站點(diǎn)發(fā)布到服務(wù)器上。
需要說明的是,從命令行執(zhí)行maven任務(wù)實(shí)質(zhì)上就是調(diào)用Maven的生命周期階段。例如執(zhí)行命令mvn clean install,則調(diào)用clean生命周期的clean階段和default生命周期的install階段,而實(shí)際上執(zhí)行的階段為clean生命周期的pre-clean、clean階段,以及default生命周期的從validate至install的所有階段。
3.插件
在Maven的生命周期中對軟件人員的工作進(jìn)行了抽象,相當(dāng)于做一個模板,具體的實(shí)現(xiàn)則由插件來完成。下面列出default生命周期的內(nèi)置插件綁定關(guān)系及具體任務(wù):
更加詳細(xì)的內(nèi)容可以參考Apache Maven官網(wǎng):
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
4.倉庫
Maven通過倉庫來統(tǒng)一管理文件,同時,為了實(shí)現(xiàn)重用,項(xiàng)目構(gòu)建后生成的構(gòu)件也安裝或部署到倉庫中。Maven倉庫的分為本地倉庫和遠(yuǎn)程倉庫,而遠(yuǎn)程倉庫又包含中央倉庫、私服和其他公共庫。初始狀態(tài)下,本地倉庫是不存在的,當(dāng)用戶執(zhí)行Maven命令后,則創(chuàng)建本地倉庫,并根據(jù)實(shí)際需要,從遠(yuǎn)程倉庫下載構(gòu)件至本地倉庫。
(1).本地倉庫:一般來說,在Maven項(xiàng)目目錄下,沒有諸如lib這樣用來存放依賴文件的目錄。當(dāng)Maven在執(zhí)行編譯或測試時,如果需要依賴文件,它總是基于坐標(biāo)使用本地倉庫的依賴文件。通過setting.xml文件標(biāo)識:
D:/repository/
(2).遠(yuǎn)程倉庫:相對本地倉庫而言;
(3).中央倉庫:是一個默認(rèn)的遠(yuǎn)程倉庫;包含了大部分的開源JAVA構(gòu)件以及源碼等信息。Maven的安裝文件自帶了中央倉庫的配置。在Maven的安裝目錄下:$MAVEN_HOME\\lib\\maven-model-builder-3.3.9.jar
central為中央倉庫的唯一標(biāo)識。
(4).私服:是一種特殊的遠(yuǎn)程倉庫,架設(shè)在公司內(nèi)部。當(dāng)下載構(gòu)件時,從私服下載,如果私服不存在,則私服請求提供服務(wù)。
5.Archetype
意為“原型”,可以理解為Maven項(xiàng)目的模板,以便用戶可以快速創(chuàng)建項(xiàng)目,同時針對同類項(xiàng)目保持相同的項(xiàng)目結(jié)構(gòu)及配置約定。Archetype是通過maven-archetype-plugin插件實(shí)現(xiàn),官網(wǎng)鏈接:
http://maven.apache.org/archetype/maven-archetype-plugin/
三、Maven在OpenDaylight的使用
OpenDaylight使用Maven工具進(jìn)行項(xiàng)目構(gòu)建和依賴管理,并在構(gòu)建簡單的簡易APP開發(fā)一文中對Maven的基礎(chǔ)進(jìn)行介紹,鏈接如下:
https://docs.opendaylight.org/en/latest/developer-guide/developing-apps-on-the-opendaylight-controller.html
1. 修改settings.xml
為了從遠(yuǎn)程倉庫下載OpenDaylight版本的依賴包,首先需要修改maven的settings.xml,并指定遠(yuǎn)程倉庫的地址。事實(shí)上,OpenDaylight提供了預(yù)先寫好的settings.xml文件,其下載地址為:
https://github.com/opendaylight/odlparent/blob/stable/carbon/settings.xml
https://raw.githubusercontent.com/opendaylight/odlparent/master/settings.xml
具體內(nèi)容解釋如下:
Maven安裝以后,setting.xml文件存在兩個地方:
①USR_HOME/.m2/settings.xml,表示當(dāng)前用戶范圍的配置文件;
②MAVEN_HOME/conf/settings.xml,表示全局范圍配置文件,修改后將影響本機(jī)所有的用戶配置。
詳細(xì)的setting文件說明參見鏈接:
https://maven.apache.org/settings.html。
2. 選擇Archetype
Archetype是一個Maven項(xiàng)目模板工具包,使用Archetype來生成項(xiàng)目骨架,可以使得開發(fā)人員在開發(fā)新的應(yīng)用程序時,使用與OpenDaylight風(fēng)格一致的最佳實(shí)踐方法。
OpenDaylight應(yīng)用創(chuàng)建的Archetype可通過如下鏈接查詢:
https://nexus.opendaylight.org/#nexus-search;gav~org.opendaylight.archetypes~~~~
執(zhí)行命令:
通過交互構(gòu)建hello示例應(yīng)用,生成的文件視圖大致為:
-
JAVA
+關(guān)注
關(guān)注
19文章
2943瀏覽量
104089 -
XML
+關(guān)注
關(guān)注
0文章
186瀏覽量
32993 -
HTML
+關(guān)注
關(guān)注
0文章
276瀏覽量
32577
發(fā)布評論請先 登錄
相關(guān)推薦
評論