{eval=Array;=+count(Array);}
maven是一個JAVA項目管理工具,而Jenkins是一個基于Java開發的持續集成工具。接下來,我們分別來介紹它們到底是什么。
作為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去觸發一個job,就會對制定代碼庫的代碼就行打包,打成一個war包放在指定地點,之后觸發第二個job,會根據Jenkins里的不同配置,把war包拉到指定的Linux機器上,最后再開始部署以及Nginx的熱切換。Jenkins可以理解為一個可手動觸發,也可定時觸發的任務,主要應用場景是實行代碼更新后的持續集成,保證代碼庫里的代碼的穩定性。
但是我們現在正在主張去Jenkins化,使用我們自己開發的一些敏捷開發工具來代替Jenkins的工作。
maven和Jenkins能做的事遠不止上面提到的這些,比如maven還能夠連接不同倉,打包等等,今天就簡單介紹到這里,歡迎大家在下方評論區與我溝通討論。
我是蘇蘇思量,來自BAT的Java開發工程師,每日分享科技類見聞,歡迎關注我,與我共同進步。
還是按照我的理解給大家解釋一下什么是Maven,什么是Jenkins。
如果有理解不對的地方,請大家留言指正。
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不做實際的工作,每個任務實際上是由插件完成。
介紹一下我們經常用的幾個插件:
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是持續構建的可視化web工具。
直白點兒說:項目的自動化編譯、打包、部署,我提交了代碼之后(svn/git),Jenkins會自動的把代碼拿下來,編譯好,編譯之前可能要跑測試,測試通過之后項目直接打包,然后部署到服務器上面。
可以看出來,很多事情Jenkins也不自己做,也是和Maven做集成(也可以和ant、gradle集成),跑測試、編譯、打包這些也都是Maven在做的。
希望我的回答可以幫助到你!
我叫souvc,在互聯網公司做技術研發,現在的公司就是通過Maven來管理Java項目的Jar包,通過Jenkins來構建Java項目以及發布到測試,正式環境。所以我來回答一下這個題目。希望能幫到大家!
Maven是Apache 開源的一個軟件。
Apache Maven是一個軟件項目管理和理解工具?;陧椖繉ο竽P?POM)的概念,Maven可以管理一個項目的構建、報告和文檔,從一個中心的信息。
Apache Maven 是一個管理Java項目Jar包依賴的一個工具,有了它就不用一個個的Jar放到Java項目中,同時還能通過Maven去構建Java項目,使得編譯一個Java項目更加的簡單,方便。
Maven提高了程序員的生產效率。
Maven的使用,使得源代碼中不用帶Jar包,使得源代碼之間的轉移更加方便。因為它可以引用本地的Jar包。
Jenkins是一個開源軟件項目,是基于Java開發的一種持續集成工具,用于監控持續重復的工作,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能。
Jenkins就是一個輔助發布,構建Java項目的工具,原來通過寫Linux腳本來執行的事情,交給Jenkins來做,釋放程序員的雙手,不用經常的手動執行腳本。通過Jenkins來達到自動化部署,自動化運營的目的。
通俗一點說
倆者的區別
Maven是管理Jar的工具,是方便程序員管理Jar包的。而Jenkins是自動化構建工具,是提高程序員發布Java應用的效率的。它們專注點不一樣。
倆者的共同點
Maven也可以發布應用,Jenkins也可以依賴Maven進行構建項目。
當然還有很多其他的功能,在這里就不一一列出來了。如有其他不明,可以在評論區留言,詳細為大家解答!
我是souvc,請關注我,給大家分享相關的互聯網技術。
我們知道,任何一款軟件都是先由程序員在本地環境中開發,然后再部署到線上環境的。傳統的部署方式是手工復制文件、進行參數配置、再來部署的,假設一個項目需要頻繁發布這種手動方式就顯得很慢了,于是也就有了自動化發布系統。
中型以上項目會涉及到自動化構建及發布,而這一切離不開Maven和Jenkins,那什么是Maven和Jenkins呢?兩者又有什么區別呢?
Java開發者肯定接觸過Maven,在Maven出現之前如果我們要導入jar包,都是復制jar包文件到指定目錄來實現導入的,但是這種方式就存在jar包依懶和沖突的問題:
可能重復引用了相同的jar包;
團隊開發中不同開發者引用的jar包不同,存在沖突等。
Maven的出現就完美的解決了這些尷尬,它會自動幫我們管理jar包,如果某個jar包有其它依懶,Maven也會幫你把這些依懶包下載導入進來,十分方便。
Jenkins是一款基于Java開發的持續集成工具,可以自動化構建及測試軟件項目。
如何理解呢?大致是這樣的流程:
我們寫完代碼后將代碼上傳到Git倉庫(或SVN)中 => 然后由Jenkins來觸發一個Job任務 => Jenkins就會自動將項目打包 => 然后發布到指定服務器上(將Git中的項目同步至服務器上)=> 進行指定的操作(如重啟服務)。
看下去Maven和Jenkins都是用來構建項目的,但是這兩者是有很大區別的。
Maven偏項目開發管理,主要是解決項目依懶問題;
Jenkins偏運維管理,讓運維從繁瑣的發布工作中解脫出來。
Maven一般用于構建工程(設置項目的classpath,用于加載第三方Jar包等),也可以借助第三方插件,實現發布等功能!
Jenkins是持續集成工具,一般用于發布和管理最終產品,在集成了版本控制插件后,可以實現自動部署和發布。
兩者的側重點不同,但可以相輔相承,Jenkins中的Maven插件,可以讓你的部署自動化……
0
回答0
回答0
回答0
回答0
回答0
回答9
回答0
回答9
回答0
回答