-
1 # 網路圈
-
2 # 會點程式碼的大叔
還是按照我的理解給大家解釋一下什麼是Maven,什麼是Jenkins。
MavenApache Maven is a software project management and comprehension tool.
比較官方的定義:Maven是一個專案管理工具,也有說構建工具的。
很多人都說Maven是管理jar包的,這個只是他眾多功能中的一個,Maven的作用貫穿於專案的整個生命週期。
啥叫專案週期...專案開發、編譯、測試、打包、整合測試、部署,這些就是專案的生命週期,所以Maven可以協助開發、編譯、測試、打包、整合測試、部署,它都可以做!(其實真正做的不是Maven,它只是找了幫手去做這些事情,下面會講到)
我們經常使用的管理jar包的功能:有一箇中央倉庫,存了好多好多jar包,每個jar包不同的版本都存了。你想用什麼jar包,只需要在Maven的配置檔案中(pom.xml)配置一下,寫好用什麼jar包,什麼版本即可,Maven會自動幫你下載jar包;你依賴的jar包如果還依賴其他jar包的話,它也可以幫你下載下來。(這也是簡單的介紹下功能,實際上比這個要複雜很多)
Maven還是一個依賴外掛()執行的框架,Maven不做實際的工作,每個任務實際上是由外掛完成。
介紹一下我們經常用的幾個外掛:
maven-dependency-plugin:幫助分析專案依賴。比如我的專案以來的A.jar,而A.jar又依賴了B.jar...然後一層套著一層,這個外掛就是管理這個的。比如dependency:list能夠列出專案最終解析到的依賴列表。protobuf-java-format:谷歌出品,做程式碼format的工具,專案構建的時候,工具自動回幫助你把程式碼進行格式化,比如程式碼的縮排是幾個空格。
maven-resources-plugin:Maven將Java程式碼檔案和資原始檔區分開,maven-resources-plugin就是用來處理資原始檔。資原始檔中的屬性可以使用佔位符${propertyName},而這個屬性可能在開發環境、測試環境、生產環境上不同,這種場景可以使用Maven的profile來支援,每個profile都可以獨立維護一套引數值,在mvn package的時候靈活指定。
wagon-maven-plugin:用於一鍵部署,把本地打包的jar檔案,上傳到遠端伺服器上,並執行伺服器上的shell命令。
外掛非常多,就不一一介紹了。
可以看出來,mvn就是一個整合商,提供了很多插口,你想要什麼功能,比如你想做整合測試,那麼你就告訴mvn你要做整合測試(pom.xml檔案中配置),mvn就幫你把整合測試的元件插到插孔裡面了,然後你執行一個mvn xxx的命令,系統就可以跑整合測試了。
Jenkins官方說法:Jenkins是持續構建的視覺化web工具。
直白點兒說:專案的自動化編譯、打包、部署,我提交了程式碼之後(svn/git),Jenkins會自動的把程式碼拿下來,編譯好,編譯之前可能要跑測試,測試透過之後專案直接打包,然後部署到伺服器上面。
可以看出來,很多事情Jenkins也不自己做,也是和Maven做整合(也可以和ant、gradle整合),跑測試、編譯、打包這些也都是Maven在做的。
-
3 # 一個存在感小透明
maven是一個JAVA專案管理工具,而Jenkins是一個基於Java開發的持續整合工具。接下來,我們分別來介紹它們到底是什麼。
maven作為Java開發工程師,我是非常喜歡maven的。我自己有時候需要自己寫小的程式來處理些繁瑣資料的時候,也是喜歡用maven的。首先,在目前的eclipse和intelliJ IDE中,建立MAVEN工程的代價非常小,在new project的時候就可以直接選擇maven project而不是傳統的java project。
建立了project之後,需要配置pom檔案。如果你已經有過maven專案,只需要把原來的pom檔案的內容複製過來即可,需要修改的部分是artifact,groupId這類用於把當前maven工程區別去過去的maven工程的引數。
還有就是為了乾淨整潔,可以把無用的dependency都刪除。說到dependency,這真是我最喜歡的maven能力之一了。我們過去用普通的java project,如果需要引入第三方jar包,通常需要你自己去網上找到這個jar包下載到本地,再在build path(eclipse)或project structure(IntelliJ)裡手動為當前project新增對這個jar包的依賴,才能import這個jar包,使用它的功能。然而有了pom檔案,你需要在百度上輸入“{jar包名稱} dependency”就能在網上找到對應的程式碼。如下,只需要把這段程式碼放到pom檔案的dependencies標籤下,mavan自己就會去幫你下載這個jar包,隨後直接在工程裡使用這個jar包的功能就可以了,極大的節約了時間和精力。
JenkinsJenkins並不是一個在開發過程中使用工具,而是監控持續重複的工作,使軟體的持續整合成為可能。我分享下我們專案組使用的Jenkins方式。
我們寫完程式碼後,上傳到統一的程式碼庫,然後由Jenkins去觸發一個job,就會對制定程式碼庫的程式碼就行打包,打成一個war包放在指定地點,之後觸發第二個job,會根據Jenkins裡的不同配置,把war包拉到指定的Linux機器上,最後再開始部署以及Nginx的熱切換。Jenkins可以理解為一個可手動觸發,也可定時觸發的任務,主要應用場景是實行程式碼更新後的持續整合,保證程式碼庫裡的程式碼的穩定性。
但是我們現在正在主張去Jenkins化,使用我們自己開發的一些敏捷開發工具來代替Jenkins的工作。
-
4 # AngryRED
Maven一般用於構建工程(設定專案的classpath,用於載入第三方Jar包等),也可以藉助第三方外掛,實現釋出等功能!
Jenkins是持續整合工具,一般用於釋出和管理最終產品,在集成了版本控制外掛後,可以實現自動部署和釋出。
兩者的側重點不同,但可以相輔相承,Jenkins中的Maven外掛,可以讓你的部署自動化……
-
5 # 大劉哥聊技術
一、Maven是何物?
Maven是Apache 開源的一個軟體。
比較專業的說法Apache Maven是一個軟體專案管理和理解工具。基於專案物件模型(POM)的概念,Maven可以管理一個專案的構建、報告和文件,從一箇中心的資訊。
比較通俗的說法Apache Maven 是一個管理Java專案Jar包依賴的一個工具,有了它就不用一個個的Jar放到Java專案中,同時還能透過Maven去構建Java專案,使得編譯一個Java專案更加的簡單,方便。
Maven優點Maven提高了程式設計師的生產效率。
Maven使得專案轉移更加方便。Maven的使用,使得原始碼中不用帶Jar包,使得原始碼之間的轉移更加方便。因為它可以引用本地的Jar包。
二、Jenkins是何物?比較專業的說法Jenkins是一個開源軟體專案,是基於Java開發的一種持續整合工具,用於監控持續重複的工作,旨在提供一個開放易用的軟體平臺,使軟體的持續整合變成可能。
比較通俗的說法Jenkins就是一個輔助釋出,構建Java專案的工具,原來透過寫Linux指令碼來執行的事情,交給Jenkins來做,釋放程式設計師的雙手,不用經常的手動執行指令碼。透過Jenkins來達到自動化部署,自動化運營的目的。
三、小結通俗一點說
倆者的區別
Maven是管理Jar的工具,是方便程式設計師管理Jar包的。而Jenkins是自動化構建工具,是提高程式設計師釋出Java應用的效率的。它們專注點不一樣。
倆者的共同點
Maven也可以釋出應用,Jenkins也可以依賴Maven進行構建專案。
-
6 # java老菜鳥
簡單來說Maven是一套JAVA軟體開發的規矩,可以幫助開發人員提升開發效率;jenkins則是一個持續整合工具,可以實現軟體的測試/釋出的自動化。兩者是在軟體工程不同階段的工具,Maven在開發階段,jenkins則是在測試/釋出階段。
maven和jenkins是軟體開發中不同階段使用的工具
Maven是一個JAVA軟體專案管理工具,可以說已經是JAVA軟體專案管理的事實標準,目前大多數商業JAVA專案都使用Maven進行管理。Maven對專案的構建,編譯,依賴,文件等進行管理,簡化了這部分工作,使工程師更專注於業務開發。
Jenkins為整合測試以及軟體釋出提供自動化支援。軟體測試階段,專案需要頻繁的修復和釋出,如果人工執行,將浪費大量的人力,jenkins解決了這一問題,提高了測試的效率。jenkins可以整合多種構建工具,如果專案使用maven進行管理,jenkins也可以方便的整合maven,完成編譯和打包工作。
回覆列表
我們知道,任何一款軟體都是先由程式設計師在本地環境中開發,然後再部署到線上環境的。傳統的部署方式是手工複製檔案、進行引數配置、再來部署的,假設一個專案需要頻繁釋出這種手動方式就顯得很慢了,於是也就有了自動化釋出系統。
中型以上專案會涉及到自動化構建及釋出,而這一切離不開Maven和Jenkins,那什麼是Maven和Jenkins呢?兩者又有什麼區別呢?
Maven是用來解決專案依懶關係的Java開發者肯定接觸過Maven,在Maven出現之前如果我們要匯入jar包,都是複製jar包檔案到指定目錄來實現匯入的,但是這種方式就存在jar包依懶和衝突的問題:
可能重複引用了相同的jar包;
團隊開發中不同開發者引用的jar包不同,存在衝突等。
Maven的出現就完美的解決了這些尷尬,它會自動幫我們管理jar包,如果某個jar包有其它依懶,Maven也會幫你把這些依懶包下載匯入進來,十分方便。
Jenkins是用來負責構建釋出的Jenkins是一款基於Java開發的持續整合工具,可以自動化構建及測試軟體專案。
如何理解呢?大致是這樣的流程:
我們寫完程式碼後將程式碼上傳到Git倉庫(或SVN)中 => 然後由Jenkins來觸發一個Job任務 => Jenkins就會自動將專案打包 => 然後釋出到指定伺服器上(將Git中的專案同步至伺服器上)=> 進行指定的操作(如重啟服務)。
Maven和Jenkins的區別及關係看下去Maven和Jenkins都是用來構建專案的,但是這兩者是有很大區別的。
Maven偏專案開發管理,主要是解決專案依懶問題;
Jenkins偏運維管理,讓運維從繁瑣的釋出工作中解脫出來。
雖說兩者定位不同,但一個專案想自動化構建釋出,這兩者往往是配合使用的,通常是用Jenkins來構建一個Maven專案,即:Jenkins利用專案中的pom檔案可以減輕構建配置工作。