{eval=Array;=+count(Array);}
maven是一個(gè)JAVA項(xiàng)目管理工具,而Jenkins是一個(gè)基于Java開(kāi)發(fā)的持續(xù)集成工具。接下來(lái),我們分別來(lái)介紹它們到底是什么。
作為Java開(kāi)發(fā)工程師,我是非常喜歡maven的。我自己有時(shí)候需要自己寫小的程序來(lái)處理些繁瑣數(shù)據(jù)的時(shí)候,也是喜歡用maven的。首先,在目前的eclipse和intelliJ IDE中,創(chuàng)建MAVEN工程的代價(jià)非常小,在new project的時(shí)候就可以直接選擇maven project而不是傳統(tǒng)的java project。
創(chuàng)建了project之后,需要配置pom文件。如果你已經(jīng)有過(guò)maven項(xiàng)目,只需要把原來(lái)的pom文件的內(nèi)容復(fù)制過(guò)來(lái)即可,需要修改的部分是artifact,groupId這類用于把當(dāng)前maven工程區(qū)別去過(guò)去的maven工程的參數(shù)。
還有就是為了干凈整潔,可以把無(wú)用的dependency都刪除。說(shuō)到dependency,這真是我最喜歡的maven能力之一了。我們過(guò)去用普通的java project,如果需要引入第三方j(luò)ar包,通常需要你自己去網(wǎng)上找到這個(gè)jar包下載到本地,再在build path(eclipse)或project structure(IntelliJ)里手動(dòng)為當(dāng)前project添加對(duì)這個(gè)jar包的依賴,才能import這個(gè)jar包,使用它的功能。然而有了pom文件,你需要在百度上輸入“{jar包名稱} dependency”就能在網(wǎng)上找到對(duì)應(yīng)的代碼。如下,只需要把這段代碼放到pom文件的dependencies標(biāo)簽下,mavan自己就會(huì)去幫你下載這個(gè)jar包,隨后直接在工程里使用這個(gè)jar包的功能就可以了,極大的節(jié)約了時(shí)間和精力。
Jenkins并不是一個(gè)在開(kāi)發(fā)過(guò)程中使用工具,而是監(jiān)控持續(xù)重復(fù)的工作,使軟件的持續(xù)集成成為可能。我分享下我們項(xiàng)目組使用的Jenkins方式。
我們寫完代碼后,上傳到統(tǒng)一的代碼庫(kù),然后由Jenkins去觸發(fā)一個(gè)job,就會(huì)對(duì)制定代碼庫(kù)的代碼就行打包,打成一個(gè)war包放在指定地點(diǎn),之后觸發(fā)第二個(gè)job,會(huì)根據(jù)Jenkins里的不同配置,把war包拉到指定的Linux機(jī)器上,最后再開(kāi)始部署以及Nginx的熱切換。Jenkins可以理解為一個(gè)可手動(dòng)觸發(fā),也可定時(shí)觸發(fā)的任務(wù),主要應(yīng)用場(chǎng)景是實(shí)行代碼更新后的持續(xù)集成,保證代碼庫(kù)里的代碼的穩(wěn)定性。
但是我們現(xiàn)在正在主張去Jenkins化,使用我們自己開(kāi)發(fā)的一些敏捷開(kāi)發(fā)工具來(lái)代替Jenkins的工作。
maven和Jenkins能做的事遠(yuǎn)不止上面提到的這些,比如maven還能夠連接不同倉(cāng),打包等等,今天就簡(jiǎn)單介紹到這里,歡迎大家在下方評(píng)論區(qū)與我溝通討論。
我是蘇蘇思量,來(lái)自BAT的Java開(kāi)發(fā)工程師,每日分享科技類見(jiàn)聞,歡迎關(guān)注我,與我共同進(jìn)步。
還是按照我的理解給大家解釋一下什么是Maven,什么是Jenkins。
如果有理解不對(duì)的地方,請(qǐng)大家留言指正。
Apache Maven is a software project management and comprehension tool.
比較官方的定義:Maven是一個(gè)項(xiàng)目管理工具,也有說(shuō)構(gòu)建工具的。
很多人都說(shuō)Maven是管理jar包的,這個(gè)只是他眾多功能中的一個(gè),Maven的作用貫穿于項(xiàng)目的整個(gè)生命周期。
啥叫項(xiàng)目周期...項(xiàng)目開(kāi)發(fā)、編譯、測(cè)試、打包、集成測(cè)試、部署,這些就是項(xiàng)目的生命周期,所以Maven可以協(xié)助開(kāi)發(fā)、編譯、測(cè)試、打包、集成測(cè)試、部署,它都可以做!(其實(shí)真正做的不是Maven,它只是找了幫手去做這些事情,下面會(huì)講到)
我們經(jīng)常使用的管理jar包的功能:有一個(gè)中央倉(cāng)庫(kù),存了好多好多jar包,每個(gè)jar包不同的版本都存了。你想用什么jar包,只需要在Maven的配置文件中(pom.xml)配置一下,寫好用什么jar包,什么版本即可,Maven會(huì)自動(dòng)幫你下載jar包;你依賴的jar包如果還依賴其他jar包的話,它也可以幫你下載下來(lái)。(這也是簡(jiǎn)單的介紹下功能,實(shí)際上比這個(gè)要復(fù)雜很多)
Maven還是一個(gè)依賴插件()執(zhí)行的框架,Maven不做實(shí)際的工作,每個(gè)任務(wù)實(shí)際上是由插件完成。
介紹一下我們經(jīng)常用的幾個(gè)插件:
protobuf-java-format:谷歌出品,做代碼format的工具,項(xiàng)目構(gòu)建的時(shí)候,工具自動(dòng)回幫助你把代碼進(jìn)行格式化,比如代碼的縮進(jìn)是幾個(gè)空格。
maven-resources-plugin:Maven將Java代碼文件和資源文件區(qū)分開(kāi),maven-resources-plugin就是用來(lái)處理資源文件。資源文件中的屬性可以使用占位符${propertyName},而這個(gè)屬性可能在開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境、生產(chǎn)環(huán)境上不同,這種場(chǎng)景可以使用Maven的profile來(lái)支持,每個(gè)profile都可以獨(dú)立維護(hù)一套參數(shù)值,在mvn package的時(shí)候靈活指定。
wagon-maven-plugin:用于一鍵部署,把本地打包的jar文件,上傳到遠(yuǎn)程服務(wù)器上,并執(zhí)行服務(wù)器上的shell命令。
插件非常多,就不一一介紹了。
可以看出來(lái),mvn就是一個(gè)集成商,提供了很多插口,你想要什么功能,比如你想做集成測(cè)試,那么你就告訴mvn你要做集成測(cè)試(pom.xml文件中配置),mvn就幫你把集成測(cè)試的組件插到插孔里面了,然后你執(zhí)行一個(gè)mvn xxx的命令,系統(tǒng)就可以跑集成測(cè)試了。
官方說(shuō)法:Jenkins是持續(xù)構(gòu)建的可視化web工具。
直白點(diǎn)兒說(shuō):項(xiàng)目的自動(dòng)化編譯、打包、部署,我提交了代碼之后(svn/git),Jenkins會(huì)自動(dòng)的把代碼拿下來(lái),編譯好,編譯之前可能要跑測(cè)試,測(cè)試通過(guò)之后項(xiàng)目直接打包,然后部署到服務(wù)器上面。
可以看出來(lái),很多事情Jenkins也不自己做,也是和Maven做集成(也可以和ant、gradle集成),跑測(cè)試、編譯、打包這些也都是Maven在做的。
希望我的回答可以幫助到你!
我叫souvc,在互聯(lián)網(wǎng)公司做技術(shù)研發(fā),現(xiàn)在的公司就是通過(guò)Maven來(lái)管理Java項(xiàng)目的Jar包,通過(guò)Jenkins來(lái)構(gòu)建Java項(xiàng)目以及發(fā)布到測(cè)試,正式環(huán)境。所以我來(lái)回答一下這個(gè)題目。希望能幫到大家!
Maven是Apache 開(kāi)源的一個(gè)軟件。
Apache Maven是一個(gè)軟件項(xiàng)目管理和理解工具。基于項(xiàng)目對(duì)象模型(POM)的概念,Maven可以管理一個(gè)項(xiàng)目的構(gòu)建、報(bào)告和文檔,從一個(gè)中心的信息。
Apache Maven 是一個(gè)管理Java項(xiàng)目Jar包依賴的一個(gè)工具,有了它就不用一個(gè)個(gè)的Jar放到Java項(xiàng)目中,同時(shí)還能通過(guò)Maven去構(gòu)建Java項(xiàng)目,使得編譯一個(gè)Java項(xiàng)目更加的簡(jiǎn)單,方便。
Maven提高了程序員的生產(chǎn)效率。
Maven的使用,使得源代碼中不用帶Jar包,使得源代碼之間的轉(zhuǎn)移更加方便。因?yàn)樗梢砸帽镜氐腏ar包。
Jenkins是一個(gè)開(kāi)源軟件項(xiàng)目,是基于Java開(kāi)發(fā)的一種持續(xù)集成工具,用于監(jiān)控持續(xù)重復(fù)的工作,旨在提供一個(gè)開(kāi)放易用的軟件平臺(tái),使軟件的持續(xù)集成變成可能。
Jenkins就是一個(gè)輔助發(fā)布,構(gòu)建Java項(xiàng)目的工具,原來(lái)通過(guò)寫Linux腳本來(lái)執(zhí)行的事情,交給Jenkins來(lái)做,釋放程序員的雙手,不用經(jīng)常的手動(dòng)執(zhí)行腳本。通過(guò)Jenkins來(lái)達(dá)到自動(dòng)化部署,自動(dòng)化運(yùn)營(yíng)的目的。
通俗一點(diǎn)說(shuō)
倆者的區(qū)別
Maven是管理Jar的工具,是方便程序員管理Jar包的。而Jenkins是自動(dòng)化構(gòu)建工具,是提高程序員發(fā)布Java應(yīng)用的效率的。它們專注點(diǎn)不一樣。
倆者的共同點(diǎn)
Maven也可以發(fā)布應(yīng)用,Jenkins也可以依賴Maven進(jìn)行構(gòu)建項(xiàng)目。
當(dāng)然還有很多其他的功能,在這里就不一一列出來(lái)了。如有其他不明,可以在評(píng)論區(qū)留言,詳細(xì)為大家解答!
我是souvc,請(qǐng)關(guān)注我,給大家分享相關(guān)的互聯(lián)網(wǎng)技術(shù)。
我們知道,任何一款軟件都是先由程序員在本地環(huán)境中開(kāi)發(fā),然后再部署到線上環(huán)境的。傳統(tǒng)的部署方式是手工復(fù)制文件、進(jìn)行參數(shù)配置、再來(lái)部署的,假設(shè)一個(gè)項(xiàng)目需要頻繁發(fā)布這種手動(dòng)方式就顯得很慢了,于是也就有了自動(dòng)化發(fā)布系統(tǒng)。
中型以上項(xiàng)目會(huì)涉及到自動(dòng)化構(gòu)建及發(fā)布,而這一切離不開(kāi)Maven和Jenkins,那什么是Maven和Jenkins呢??jī)烧哂钟惺裁磪^(qū)別呢?
Java開(kāi)發(fā)者肯定接觸過(guò)Maven,在Maven出現(xiàn)之前如果我們要導(dǎo)入jar包,都是復(fù)制jar包文件到指定目錄來(lái)實(shí)現(xiàn)導(dǎo)入的,但是這種方式就存在jar包依懶和沖突的問(wèn)題:
可能重復(fù)引用了相同的jar包;
團(tuán)隊(duì)開(kāi)發(fā)中不同開(kāi)發(fā)者引用的jar包不同,存在沖突等。
Maven的出現(xiàn)就完美的解決了這些尷尬,它會(huì)自動(dòng)幫我們管理jar包,如果某個(gè)jar包有其它依懶,Maven也會(huì)幫你把這些依懶包下載導(dǎo)入進(jìn)來(lái),十分方便。
Jenkins是一款基于Java開(kāi)發(fā)的持續(xù)集成工具,可以自動(dòng)化構(gòu)建及測(cè)試軟件項(xiàng)目。
如何理解呢?大致是這樣的流程:
我們寫完代碼后將代碼上傳到Git倉(cāng)庫(kù)(或SVN)中 => 然后由Jenkins來(lái)觸發(fā)一個(gè)Job任務(wù) => Jenkins就會(huì)自動(dòng)將項(xiàng)目打包 => 然后發(fā)布到指定服務(wù)器上(將Git中的項(xiàng)目同步至服務(wù)器上)=> 進(jìn)行指定的操作(如重啟服務(wù))。
看下去Maven和Jenkins都是用來(lái)構(gòu)建項(xiàng)目的,但是這兩者是有很大區(qū)別的。
Maven偏項(xiàng)目開(kāi)發(fā)管理,主要是解決項(xiàng)目依懶問(wèn)題;
Jenkins偏運(yùn)維管理,讓運(yùn)維從繁瑣的發(fā)布工作中解脫出來(lái)。
Maven一般用于構(gòu)建工程(設(shè)置項(xiàng)目的classpath,用于加載第三方Jar包等),也可以借助第三方插件,實(shí)現(xiàn)發(fā)布等功能!
Jenkins是持續(xù)集成工具,一般用于發(fā)布和管理最終產(chǎn)品,在集成了版本控制插件后,可以實(shí)現(xiàn)自動(dòng)部署和發(fā)布。
兩者的側(cè)重點(diǎn)不同,但可以相輔相承,Jenkins中的Maven插件,可以讓你的部署自動(dòng)化……
0
回答0
回答0
回答0
回答0
回答0
回答9
回答0
回答9
回答0
回答