
目錄一、創(chuàng)建你的第一個(gè)Maven項(xiàng)目二、Maven 依賴管理1、依賴坐標(biāo)2、排除依賴 exclusions三、Maven倉庫1、Maven依賴坐標(biāo)2、Maven倉庫分類2.1 本地倉庫?編輯?編輯2.2 中央倉庫查找Jar的坐標(biāo)步驟2.3 私有服務(wù)器私服Maven 依賴查找順序有私服場景3、簡單工作流程總結(jié)4 Maven 設(shè)置國內(nèi)源4.1 配置當(dāng)前項(xiàng)目的 setting4.2 設(shè)置新項(xiàng)目的 setting四、第一個(gè)SpringBoot程序4.1 Spring Boot介紹Spring生態(tài)主要項(xiàng)目什么是Spring Boot4.2 Spring Boot項(xiàng)目創(chuàng)建使用Idea創(chuàng)建項(xiàng)目配置參數(shù)說明豆包提供僅供參考創(chuàng)建內(nèi)部五、jar包下載不下來一、創(chuàng)建你的第一個(gè)Maven項(xiàng)目首先idea有吧然后先教你如何快速創(chuàng)建一個(gè)SpringBoot的程序。見下如圖打開項(xiàng)目后如圖填好項(xiàng)目名、項(xiàng)目位置、選擇Maven接著來看一般來說打開后會(huì)展現(xiàn)如下內(nèi)容接著我來介紹一下首先需要了解的是這個(gè)pom.xml的項(xiàng)目是用來傳遞依賴的那什么是“依賴”呢想像一下你在吃飯那你吃飯是不是需要盤子那么吃飯時(shí)你的“盤子就是你的依賴”所以在這里面就是放各種你運(yùn)行Java代碼所需要的各種第三方文件的。至于從哪里導(dǎo)入是關(guān)于“倉庫”這個(gè)下文解釋。然后目光來看右側(cè)這里有一系列的命令二這里我把豆包給的簡要解釋放到這里大家可以參考Maven 生命周期就是項(xiàng)目構(gòu)建的一套固定執(zhí)行流程后面的命令執(zhí)行會(huì)自動(dòng)執(zhí)行前面所有階段。clean清理刪除項(xiàng)目編譯生成的 target 目錄把舊編譯產(chǎn)物清空。validate校驗(yàn)驗(yàn)證項(xiàng)目配置、pom 文件是否合法。compile編譯把 java 源代碼編譯成 class 字節(jié)碼文件。test測試執(zhí)行項(xiàng)目單元測試代碼。package打包把編譯后的代碼打成 jar/war 包。verify校驗(yàn)檢查對打包結(jié)果做完整性校驗(yàn)。install安裝把打好的包保存到本地 Maven 倉庫供本機(jī)其他項(xiàng)目引用。site生成項(xiàng)目文檔站點(diǎn)。deploy部署把包上傳到遠(yuǎn)程私服倉庫給團(tuán)隊(duì)其他人使用。?小知識(shí)點(diǎn) 執(zhí)行后面階段會(huì)自動(dòng)執(zhí)行前面全部階段例如執(zhí)行install會(huì)自動(dòng)依次執(zhí)行 validate → compile → test → package → verify → install。 日常開發(fā)最常用clean、compile、package、install。二、Maven 依賴管理Maven 核心能力之一就是依賴管理我們不再需要手動(dòng)下載、復(fù)制 jar 包到項(xiàng)目中全部通過pom.xml配置文件完成 jar 包的引入。依賴項(xiàng)目運(yùn)行所需要的第三方 jar 包。1、依賴坐標(biāo)每一個(gè)第三方 jar 包都擁有唯一的依賴坐標(biāo)由三部分組成groupId組織 / 公司 / 開源社區(qū)標(biāo)識(shí)artifactId項(xiàng)目、jar 包名稱version版本號(hào)示例MySQL 驅(qū)動(dòng)寫完記得一定要右上角刷新任意一個(gè)均可dependencies dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version8.0.33/version /dependency /dependenciesMaven 就會(huì)自動(dòng)從倉庫下載對應(yīng) jar 包到項(xiàng)目中。后續(xù)新增依賴、修改版本都需要執(zhí)行刷新。2、排除依賴 exclusions很多 jar 包會(huì)自帶傳遞依賴有時(shí)候傳遞過來的包會(huì)產(chǎn)生包沖突、依賴沖突。 我們可以使用exclusions標(biāo)簽把不需要的傳遞依賴排除掉。比如說我這里想排除這個(gè)包dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version8.0.30/version exclusions exclusion groupIdcom.google.protobuf/groupId artifactIdprotobuf-java/artifactId /exclusion /exclusions /dependency注意exclusion里面不需要寫 version只需要指定groupId和artifactId即可。依賴排除本質(zhì)上是為了防止版本的沖突這里了解一下暫時(shí)不需掌握太深入。PS這里還介紹一個(gè)插件--Maven Help不過由于現(xiàn)在階段排除依賴用的比較少所以這里大家感興趣的可以去裝一下流程也給你們?nèi)?、Maven倉庫OK這里再介紹一個(gè)必須了解的概念本地倉庫和遠(yuǎn)程倉庫1、Maven依賴坐標(biāo)我們通過短短幾行代碼就把依賴jar包放在了項(xiàng)目里。dependency groupIdmysql/groupId artifactIdmysql?connector?java/artifactId version8.0.30/version /dependency以上代碼稱之為坐標(biāo)坐標(biāo)是唯一的。在Maven中根據(jù)groupId、artifactId、version的配置來唯一識(shí)別一個(gè)jar包三者缺一不可。當(dāng)我們在pom文件中配置完依賴之后點(diǎn)擊刷新Maven會(huì)根據(jù)坐標(biāo)的配置去倉庫里尋找Jar包并把它下載下來添加到項(xiàng)目中。這個(gè)Jar包下載存放的地方就稱為倉庫。倉庫用于存儲(chǔ)資源管理各種jar包。Maven倉庫的本質(zhì)就是一個(gè)目錄(文件夾)這個(gè)目錄被用來存儲(chǔ)開發(fā)中所有依賴jar包插件等。2、Maven倉庫分類Maven倉庫分為兩大類本地倉庫和遠(yuǎn)程倉庫。 其中遠(yuǎn)程倉庫又分為中央倉庫、私服 和其他公共庫。2.1 本地倉庫本地倉庫就是自己計(jì)算機(jī)上的一個(gè)目錄用來存儲(chǔ)jar包。當(dāng)項(xiàng)目中引入對應(yīng)依賴jar包后Maven首先會(huì)查找本地倉庫中是否有對應(yīng)的jar包對應(yīng)方式如圖如果有則在項(xiàng)目直接引用如果沒有則去遠(yuǎn)程中央倉庫中下載對應(yīng)的jar包到本地倉庫本地倉庫地址查看方式IDEAFile - Settings查看該倉庫目錄可以看到該目錄下有很多的jar。倉庫目錄初始是空的隨著Maven的使用倉庫下文件會(huì)越來越多。本地倉庫默認(rèn)位置這里注意強(qiáng)烈不建議放到C盤否則容易爆滿建議改盤。并且路徑不要給我出現(xiàn)中文改盤步驟CtrlC與CtrlV把.m2文件復(fù)制到你想要改的文件路徑上然后修改下圖的位置為新位置第一個(gè)是Maven配置文件建議使用國內(nèi)鏡像可以去網(wǎng)上找我這里使用我自己的配置文件;2.2 中央倉庫中央倉庫是maven軟件中內(nèi)置一個(gè)遠(yuǎn)程倉庫地址服務(wù)于整個(gè)互聯(lián)網(wǎng)由Maven團(tuán)隊(duì)維護(hù)全球唯一。倉庫地址Central Repository:可以通過網(wǎng)站https://mvnrepository.com 來查詢并下載jar包。 我們既可以把自己寫好的Jar包上傳到中央倉庫需要滿足一定要求也可以從中央倉庫下載Jar包。查找Jar的坐標(biāo)步驟1、訪問 https://mvnrepository.com/2、搜索需要的jar例如搜索mysql3、選擇要添加的Jar包版本建議在新的里面選擇次新的使用人數(shù)偏多的。4、復(fù)制Jar包對應(yīng)的maven坐標(biāo)粘貼到pom.xml的dependency中實(shí)操小提示選擇版本的時(shí)候盡量避開存在漏洞Vulnerabilities的版本優(yōu)先選擇使用量高、穩(wěn)定的版本。2.3 私有服務(wù)器私服私服一般是公司、團(tuán)隊(duì)內(nèi)部搭建的私有倉庫歸屬于公司或者部門訪問通常需要權(quán)限。 引入私服之后Maven 依賴的下載查找順序會(huì)發(fā)生改變。Maven 依賴查找順序有私服場景先從本地倉庫獲取如果本地倉庫已經(jīng)存在該 jar 包直接使用。本地沒有則向私服請求資源私服有資源直接返回。私服也不存在就去中央倉庫下載中央倉庫也找不到直接報(bào)錯(cuò)。如果中央倉庫存在資源會(huì)先把資源緩存到私服再緩存到本地倉庫供本次請求使用。小提示私服供團(tuán)隊(duì)多人共用同一個(gè) jar 包團(tuán)隊(duì)只需要第一個(gè)人下載一次其他人直接從私服拿取提升團(tuán)隊(duì)開發(fā)效率。整體流程本地倉庫 → 私服 → 中央倉庫。3、簡單工作流程總結(jié)pom.xml編寫依賴坐標(biāo)maven先去本機(jī)本地倉庫找jar本地沒有就聯(lián)網(wǎng)去中央遠(yuǎn)程倉庫下載下載完成保存到本地倉庫項(xiàng)目直接引用本地倉庫jar包。4 Maven 設(shè)置國內(nèi)源Maven 默認(rèn)的中央倉庫部署在國外國內(nèi)直接訪問下載 jar 包速度很慢開發(fā)中一般會(huì)配置國內(nèi)公開鏡像源加速依賴下載。4.1 配置當(dāng)前項(xiàng)目的 settingIDEA 路徑File → Settings在這里配置的 Maven 配置僅對當(dāng)前打開的項(xiàng)目生效。4.2 設(shè)置新項(xiàng)目的 setting上面的配置只作用于當(dāng)前項(xiàng)目如果希望之后新建的所有項(xiàng)目都使用同一套 Maven 配置不用反復(fù)修改。 只需要讓新項(xiàng)目共用同一個(gè)settings.xml配置文件新建項(xiàng)目時(shí)確認(rèn) Maven 的settings.xml文件路徑即可無需重復(fù)編寫鏡像配置。四、第一個(gè)SpringBoot程序4.1 Spring Boot介紹在學(xué)習(xí)SpringBoot之前我們先來了解Spring框架。訪問Spring官方網(wǎng)站Spring | Home。Spring官方對它的定位Spring讓Java編程變得更快、更簡單、更安全。憑借對開發(fā)速度、簡潔性與生產(chǎn)力的追求Spring已經(jīng)成為全球最流行的Java開發(fā)框架。Spring生態(tài)下提供了大量開源項(xiàng)目覆蓋Web開發(fā)、安全、大數(shù)據(jù)、分布式系統(tǒng)等各個(gè)領(lǐng)域形成了一套完整的技術(shù)生態(tài)圈日常開發(fā)我們會(huì)優(yōu)先選用Spring生態(tài)內(nèi)的組件解決業(yè)務(wù)問題。Spring生態(tài)主要項(xiàng)目上面所有項(xiàng)目底層都基于Spring Framework。但是原生Spring Framework有一個(gè)很突出的痛點(diǎn)配置繁瑣、入門門檻高。 為了解決大量XML配置帶來的麻煩Spring推出了Spring Boot用來簡化Spring開發(fā)。什么是Spring Boot我們可以用生活中的腳手架來理解Spring Boot。 蓋房子時(shí)腳手架可以幫助工人砌墻、抹灰、裝修核心作用就是更快地把房子搭建出來。Spring Boot就是Spring框架的腳手架專門用來快速開發(fā)Spring應(yīng)用程序。在沒有Spring Boot之前使用原生Spring開發(fā)我們需要手動(dòng)引入一大堆依賴、編寫大量xml配置文件配置十分繁瑣。 Spring Boot腳手架就是為了解決這個(gè)痛點(diǎn)而生簡化依賴管理、自動(dòng)裝配大幅降低Spring的開發(fā)成本。4.2 Spring Boot項(xiàng)目創(chuàng)建使用Idea創(chuàng)建因?yàn)槲覀冇玫腎dea社區(qū)版其他版本也同樣適用所以建議自己想辦法去弄個(gè)專業(yè)版。新建項(xiàng)目進(jìn)入項(xiàng)目配置頁面需要填寫項(xiàng)目的各項(xiàng)基礎(chǔ)屬性。項(xiàng)目配置參數(shù)說明豆包提供僅供參考參數(shù)示例值說明Group Idcom.example組織ID一般寫公司/個(gè)人反向域名代表項(xiàng)目所屬組織Artifact Iddemo項(xiàng)目ID當(dāng)前項(xiàng)目的模塊名稱Version0.0.1?SNAPSHOT項(xiàng)目版本SNAPSHOT代表快照開發(fā)測試版本Project typeMaven項(xiàng)目構(gòu)建類型這里選擇Maven管理項(xiàng)目LanguageJava開發(fā)語言Spring Boot主流使用JavaPackagingJar打包方式Spring Boot項(xiàng)目一般使用Jar包Java version17JDK版本要和本地安裝的JDK保持一致Project namedemo項(xiàng)目名稱本地文件夾顯示的名字Project descriptionDemo project for Spring Boot項(xiàng)目描述對項(xiàng)目的簡單說明Package namecom.example.demo項(xiàng)目包名由GroupIdArtifactId組合而成配置完成之后點(diǎn)擊Next繼續(xù)選擇項(xiàng)目需要引入的依賴確認(rèn)之后即可生成Spring Boot工程。選擇我框起來的那兩個(gè)之一不要用snapshot即可我們做Web開發(fā)所以使用Web項(xiàng)目,創(chuàng)建內(nèi)部之后可以看到一個(gè)默認(rèn)的啟動(dòng)類然后我們可以創(chuàng)建我們的第一個(gè)Springboot程序然后下面你先模仿的來寫后期會(huì)解釋各個(gè)注釋的意思OK現(xiàn)在可以隨便打開一個(gè)瀏覽器了然后再輸入框輸入回車一下注意只留src和pom文件即可這個(gè)也刪了五、jar包下載不下來該咋辦這里附上一張圖不過小羅我目前沒有遇到過這種情況這個(gè)也是我在網(wǎng)上找的方法大家可以去嘗試。六、Spring Boot項(xiàng)目目錄Spring Boot可使用Idea或網(wǎng)頁創(chuàng)建它的設(shè)計(jì)思想是約定大于配置類上標(biāo)注SpringBootApplication就可以啟動(dòng)Spring Boot項(xiàng)目。Spring Boot項(xiàng)目有兩個(gè)主要的目錄src/main/javaJava 源代碼src/main/resources為靜態(tài)資源或配置文件/static靜態(tài)資源文件夾比如前期學(xué)的jscsshtml等靜態(tài)文件不需要服務(wù)器數(shù)據(jù)進(jìn)行綁定的頁面/templates模版資源文件夾主要存放動(dòng)態(tài)模板文件比如JSPFreemarkerThymeleaf等需要服務(wù)器動(dòng)態(tài)渲染數(shù)據(jù)的文件src/test/java測試代碼源代碼target編譯后的文件路徑pom.xmlmaven配置文件七、Web服務(wù)器瀏覽器和服務(wù)器兩端進(jìn)行數(shù)據(jù)交互使用的就是HTTP協(xié)議。前面我們已經(jīng)學(xué)習(xí)了 HTTP 協(xié)議知道了 HTTP 協(xié)議就是 HTTP 客戶端和 HTTP 服務(wù)器之間的交互數(shù)據(jù)的格式。 Web服務(wù)器就是對HTTP協(xié)議進(jìn)行封裝程序員不需要直接對協(xié)議進(jìn)行操作(自己寫代碼去解析http協(xié)議規(guī)則)讓W(xué)eb開發(fā)更加便捷所以Web服務(wù)器也被稱為WWW服務(wù)器HTTP服務(wù)器主要功能是提供網(wǎng)上信息瀏覽服務(wù)。常見的Web服務(wù)器有Apache,Nginx,IIS,Tomcat,Jboss等。SpringBoot內(nèi)置了Tomcat服務(wù)器無需配置即可直接運(yùn)行。 Tomcat默認(rèn)端口號(hào)是8080所以我們程序訪問時(shí)的端口號(hào)也是8080。八、請求響應(yīng)流程分析瀏覽器輸入U(xiǎn)RL之后發(fā)起請求就和服務(wù)器之間建立了連接。瀏覽器輸入網(wǎng)址http://127.0.0.1:8080/hello通過IP地址127.0.0.1定位到網(wǎng)絡(luò)上的一臺(tái)計(jì)算機(jī)127.0.0.1就是本機(jī)。通過端口號(hào)8080找到計(jì)算機(jī)上對應(yīng)的進(jìn)程也就是在本地計(jì)算機(jī)中找到正在運(yùn)行的8080端口的程序。/user/sayhi是請求資源位置資源對計(jì)算機(jī)而言資源就是數(shù)據(jù)web資源通過網(wǎng)絡(luò)可以訪問到的資源通常是指存放在服務(wù)器上的數(shù)據(jù)http://127.0.0.1:8080/user/sayhi就是向本地計(jì)算機(jī)中的8080端口程序獲取資源位置是/user/sayhi的數(shù)據(jù)。 8080端口程序在服務(wù)器找/hello位置的資源數(shù)據(jù)發(fā)給瀏覽器。服務(wù)器接收到瀏覽器發(fā)送的信息如/user/sayhi在服務(wù)器上找到/user/sayhi的資源把資源發(fā)送給瀏覽器九、訪問出錯(cuò)怎么辦9.1 404404表示用戶訪問的資源不存在。大概率是URL的路徑寫的不正確。錯(cuò)誤實(shí)例1url單詞拼錯(cuò)錯(cuò)誤實(shí)例2注解寫錯(cuò) 使用Controller沒有搭配ResponseBody訪問接口也會(huì)報(bào)404。9.2 500服務(wù)器出現(xiàn)內(nèi)部錯(cuò)誤。一般是服務(wù)器的代碼執(zhí)行過程中遇到了一些特殊情況(服務(wù)器異常崩潰)會(huì)產(chǎn)生這個(gè)狀態(tài)碼。 示例代碼RestController public class UserController { RequestMapping(/sayHi) public String sayHi(){ int res 10/0; return hello,Spring; } }代碼出現(xiàn)除零異常訪問就會(huì)返回500狀態(tài)碼。9.3 小結(jié)最開始學(xué)習(xí)Spring的時(shí)候會(huì)遇到很多問題更多是環(huán)境相關(guān)的問題。 我們不僅要學(xué)習(xí) Spring 代碼的基本寫法更重要的是學(xué)習(xí)排查錯(cuò)誤的思路。程序猿調(diào)試BUG如同醫(yī)生診病。 一個(gè)有經(jīng)驗(yàn)的程序猿和一個(gè)新手程序猿相比最大的優(yōu)勢往往不是代碼寫的多好而是調(diào)試效率有多高。同一個(gè)問題可能新手花了幾天都無法解決的但是有經(jīng)驗(yàn)的程序猿可能幾分鐘就搞定了。熟悉 HTTP 協(xié)議能讓我們調(diào)試問題事半功倍。4xx的狀態(tài)碼表示路徑不存在往往需要檢查 URL 是否正確和代碼中設(shè)定的 Context Path 以及 Servlet Path 是否一致。5xx的狀態(tài)碼表示服務(wù)器出現(xiàn)錯(cuò)誤往往需要觀察頁面提示的內(nèi)容和 Tomcat 自身的日志觀察是否存在報(bào)錯(cuò)。出現(xiàn)連接失敗往往意味著服務(wù)沒有正確啟動(dòng)也需要觀察服務(wù)的自身日志是否有錯(cuò)誤提示。觀察日志是調(diào)試程序的重要途徑。系統(tǒng)日志往往很多需要同學(xué)們耐心閱讀經(jīng)常閱讀熟練了就能更快速的找到問題了。十、總結(jié)Spring Boot 是為了快速開發(fā) Spring 而誕生的Spring Boot 具備Spring Boot 提供了啟動(dòng)添加依賴的功能可以快速集成框架。內(nèi)置web服務(wù)器無需配置 Tomcat 等Web服務(wù)器直接運(yùn)行和部署程序??梢酝耆珤仐壏爆嵉?XML使用注解和配置的方式進(jìn)行開發(fā)。支持更多的監(jiān)控的指標(biāo)可以更好的了解項(xiàng)目的運(yùn)行情況等特點(diǎn)。