① Gradle相對於Maven的優勢
Gradle和Maven作為自動構建工具,在項目的構建中有著廣泛的應用。它們在依賴管理、構建生命周期、載入構建系統組件等多方面有各自的特點。下面,我們將比較和討論它們在構建過程中的區別。
Gradle和Maven都服務於基於java平台的項目構建、依賴管理和項目信息管理。Maven以其XML腳本定義構建邏輯,適用於各種大小和開發模式的項目,而Gradle基於Groovy語言,提供更簡潔的DSL語法,適用於Java應用構建。
在依賴管理方面,Maven項目通常使用單一的靜態配置文件,這提供簡單性但也限制了靈活性。相比之下,Gradle允許在創建和處理時有多套依賴配置,這使得配置代碼量大幅減少,同時保留了groupId、artifactId、version等關鍵信息,且能夠解析Maven POM或Ivy的XML配置,支持排除傳遞性依賴。
載入構建系統的組件方面,Maven將組件作為插件,每個插件有自己的版本和依賴關系樹,可獨立更新。Gradle的構建系統組件分散且基於任務模型,編譯時僅下載所需的組件,這提高了靈活性。Gradle還允許用戶自由定義任務,擁有高級任務排序特性,支持動態任務創建,以及在執行失敗時不立即停止的特性。
構建生命周期方面,Maven提供有限的生命周期訪問,而Gradle提供更靈活的生命周期,允許使用Groovy代碼進行處理,使得構建流程更加自定義和靈活。
在構建輸出和用戶界面方面,Gradle提供了針對開發人員友好的輸出模式和GUI操作界面,允許自定義日誌模式和集成外部工具。Gradle的聲明性元素如SourceSets和Android Proct Flavors等提供了更細粒度的配置選項,使其在處理復雜需求時更加簡潔、易於使用和理解。
整體而言,Gradle提供簡潔和靈活的構建體驗,雖然需要掌握Groovy語言,但其靈活性和強大的DSL使得它成為Maven理念的優秀實現。對於熟悉Groovy並理解Maven配置和構建流程的開發者來說,Gradle是一個絕佳的選擇,尤其在與現有Maven系統無縫集成方面表現出色。相信隨著更多開發者掌握Groovy和理解Gradle的潛力,Gradle在未來會得到更廣泛的應用和改進。
② springboot下載文件到本地目錄
SpringBoot項目引入本地Jar包1、一,搭建一個本地maven源,仍然通過maven管理。這種方法的缺點是,一旦工程需要多人維護,每人都需要搭一個本地源,比較麻煩,除非公司有公用的內部maven源,否則這種方案反而增加工作量。
2、一般情況下java項目引入第三方的jar包,在項目下新建lib,把jar包放進入,引入即可使用。但是在Springboot的項目,直接進行打包會出現引用的類找不到的情況。
3、解決方法如下:項目下面有pom.xml文件,要在pom文件下添加這個${basedir}的意思是本地路徑添加以上代碼後即可。還有就是,在別的服務下面的子pom.xml也要添加以上代碼,但不同的是,要看好路徑。
4、由於SpringBoot內置了tomcat,所以將SpringBoot項目直接打成jar包,可以直接在cmd裡面運行。打包選中項目後,打開MavenProjects視圖,如下圖:然後運行package,將項目重新打包。當日誌出現:說明打包成功。
SpringBoot配置文件存放位置以及讀取順序
1、idea中,為了我們本地方便開發測試,我們在此處創建一個config目錄,然後把application.properties放進去,項目正常運行。jar包會自動生成在target目錄下。
2、SpringBoot系統啟動時默認會讀取的配置文件,支持propertiesyml格式。也就是說,會先載入application.properties,根據spring.profile.active的設置載入相應的application-XX.properties配置,然後按優先順序合並配置文件。
3、使用springboot的方式,此種方式jar需要放到前面格式例如以jar包發布springboot項目時,默認會先使用jar包同級目錄下的application.properties來作為項目配置文件。
4、application.properties中:server.port=8001,application.yml中:server.port=8888。問題:springboot是否都載入這兩個配置文件?如果兩個文件有相同的key,取哪一個文件的value?都載入,且按properties→yml的順序載入。
5、springboot配置文件支持靈活的路徑,以及靈活的文件名,用一個變數表達式總結如下:部分源碼如下:當滿足上述變數表達式的配置文件有多個時,會有一個配置的優先順序。
【SpringBoot】MultipartFile存本地文件SpringBoot將在類路徑中或從ServletContext的根目錄中提供名為/static(或/public或/resources或/META-INF/resources)的目錄中的靜態內容。
idea中,為了我們本地方便開發測試,我們在此處創建一個config目錄,然後把application.properties放進去,項目正常運行。jar包會自動生成在target目錄下。
newFile()中的地址就隨便你想放在那裡就放在那裡,接下來就想辦法訪問就好了。
springboot日誌配置:名稱只要是一logback開頭就行,測試使用log.xml並不會生成日誌。
配置文件SpringBoot使用一個全局的配置文件application.propertiesapplication.yml配置文件的作用:修改SpringBoot自動配置的默認值,SpringBoot在底層都給我們自動配置好。
我們現在在用的SpringCache,可以直接看SpringBoot提供的緩存枚舉類,有如下這些:EhCache:一個純Java的進程內緩存框架,所以也是基於本地緩存的。(注意EhCachex和EhCachex相互不兼容)。
SpringBoot目錄結構選擇SpringInitializr填寫你的maven項目的groupId和artifact等項目基本信息之後,在依賴中選擇Web--Web之後finish。目錄結構如下:直接運行DemoApplication.java就可以運行項目了。
先看一下最終的目錄結構:這里我們使用了Thymeleaf模板引擎來獲得後台傳來的數據並解析,使用bootstrap框架顯示數據。可以看到,Thymeleaf的用法和jsp還是有點像的。可以直接通過${}的形式來獲得attribute中的數據。
例如,imges目錄下的demo.jpg在HTML/JSP中訪問是的路徑就是,因為SpringBoot的預設工作目錄就是src/main/java,當訪問資源時,就是src/main/resources,而/static/**被SPRINGBOOT被映射到了classpath:/static下。
默認情況下,springBoot從classpath下一個叫/static(/public,/resources或/META-INF/resources)的文件夾或從ServletContext根目錄提供靜態內容。