俗話來講什麼是maven?什麼是jenkins?兩者的區別是什麼?

屋裡取鬧8023


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包的功能就可以了,極大的節約了時間和精力。

Jenkins

Jenkins並不是一個在開發過程中使用工具,而是監控持續重複的工作,使軟件的持續集成成為可能。我分享下我們項目組使用的Jenkins方式。

我們寫完代碼後,上傳到統一的代碼庫,然後由Jenkins去觸發一個job,就會對制定代碼庫的代碼就行打包,打成一個war包放在指定地點,之後觸發第二個job,會根據Jenkins裡的不同配置,把war包拉到指定的Linux機器上,最後再開始部署以及Nginx的熱切換。Jenkins可以理解為一個可手動觸發,也可定時觸發的任務,主要應用場景是實行代碼更新後的持續集成,保證代碼庫裡的代碼的穩定性。

但是我們現在正在主張去Jenkins化,使用我們自己開發的一些敏捷開發工具來代替Jenkins的工作。

maven和Jenkins能做的事遠不止上面提到的這些,比如maven還能夠連接不同倉,打包等等,今天就簡單介紹到這裡,歡迎大家在下方評論區與我溝通討論。

我是蘇蘇思量,來自BAT的Java開發工程師,每日分享科技類見聞,歡迎關注我,與我共同進步。


蘇蘇思量


還是按照我的理解給大家解釋一下什麼是Maven,什麼是Jenkins。

如果有理解不對的地方,請大家留言指正。


Maven

Apache 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在做的。


希望我的回答可以幫助到你!


會點代碼的大叔


我叫souvc,在互聯網公司做技術研發,現在的公司就是通過Maven來管理Java項目的Jar包,通過Jenkins來構建Java項目以及發佈到測試,正式環境。所以我來回答一下這個題目。希望能幫到大家!

一、Maven是何物?

Maven是Apache 開源的一個軟件。

比較專業的說法

Apache Maven是一個軟件項目管理和理解工具。基於項目對象模型(POM)的概念,Maven可以管理一個項目的構建、報告和文檔,從一箇中心的信息。

比較通俗的說法

Apache Maven 是一個管理Java項目Jar包依賴的一個工具,有了它就不用一個個的Jar放到Java項目中,同時還能通過Maven去構建Java項目,使得編譯一個Java項目更加的簡單,方便。

Maven優點

  1. Maven提高了程序員的生產效率。

  2. Maven使得項目轉移更加方便。

Maven的使用,使得源代碼中不用帶Jar包,使得源代碼之間的轉移更加方便。因為它可以引用本地的Jar包。

二、Jenkins是何物?

比較專業的說法

Jenkins是一個開源軟件項目,是基於Java開發的一種持續集成工具,用於監控持續重複的工作,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能。

比較通俗的說法

Jenkins就是一個輔助發佈,構建Java項目的工具,原來通過寫Linux腳本來執行的事情,交給Jenkins來做,釋放程序員的雙手,不用經常的手動執行腳本。通過Jenkins來達到自動化部署,自動化運營的目的。


三、小結

通俗一點說

倆者的區別

Maven是管理Jar的工具,是方便程序員管理Jar包的。而Jenkins是自動化構建工具,是提高程序員發佈Java應用的效率的。它們專注點不一樣。

倆者的共同點

Maven也可以發佈應用,Jenkins也可以依賴Maven進行構建項目。

當然還有很多其他的功能,在這裡就不一一列出來了。如有其他不明,可以在評論區留言,詳細為大家解答!

我是souvc,請關注我,給大家分享相關的互聯網技術。


souvc


簡單來說Maven是一套JAVA軟件開發的規矩,可以幫助開發人員提升開發效率;jenkins則是一個持續集成工具,可以實現軟件的測試/發佈的自動化。兩者是在軟件工程不同階段的工具,Maven在開發階段,jenkins則是在測試/發佈階段。

maven和jenkins是軟件開發中不同階段使用的工具

Maven是一個JAVA軟件項目管理工具,可以說已經是JAVA軟件項目管理的事實標準,目前大多數商業JAVA項目都使用Maven進行管理。Maven對項目的構建,編譯,依賴,文檔等進行管理,簡化了這部分工作,使工程師更專注於業務開發。

Jenkins為集成測試以及軟件發佈提供自動化支持。軟件測試階段,項目需要頻繁的修復和發佈,如果人工執行,將浪費大量的人力,jenkins解決了這一問題,提高了測試的效率。jenkins可以集成多種構建工具,如果項目使用maven進行管理,jenkins也可以方便的集成maven,完成編譯和打包工作。

希望能解答題主的疑問。同時歡迎大家討論和指正。


java老菜鳥


Maven一般用於構建工程(設置項目的classpath,用於加載第三方Jar包等),也可以藉助第三方插件,實現發佈等功能!

Jenkins是持續集成工具,一般用於發佈和管理最終產品,在集成了版本控制插件後,可以實現自動部署和發佈。

兩者的側重點不同,但可以相輔相承,Jenkins中的Maven插件,可以讓你的部署自動化……



AngryRED


兩者之間沒有什麼可比較的,完全是兩個領域


linuxsuren


什麼是嘜個?意思講:這個東西是什麼?

什麼是這個?意思講:怎麼會這個東西。


分享到:


相關文章: