Spring Boot spring-boot-maven-plugin 參數配置詳解

一 spring-boot-maven-plugin 插件的5個Goals

spring-boot:repackage,默認goal。在mvn package之后,再次打包可執行的jar/war,同時保留mvn package生成的jar/war為.origin;重新打包存在的jar或者war包從而使他們可以在命令行使用jar -jar來執行,使用layout=NONE也可以簡單的打包有嵌套依賴的jar(沒有主類,所以無法執行);它可以替代常規的構件或者連接到構建生命周期并有獨立的分級。

spring-boot:run,運行Spring Boot應用

spring-boot:start,在mvn integration-test階段,進行Spring Boot應用生命周期的管理;啟動Spring應用程序。和run目標不同,該目標不會阻塞,并且允許其他目標來操作應用程序。這個目標通常是在應用程序集成測試套件開始之前和停止之后的繼承測試腳本中使用;集成spring boot應用程序到集成測試階段,從而使應用程序在集成測試程序之前啟動

spring-boot:stop,在mvn integration-test階段,進行Spring Boot應用生命周期的管理;停止使用start目標啟動的spring應用程序,通常在測試套件完成后被調用。;集成spring boot應用程序到集成測試階段,從而使應用程序在集成測試程序之前啟動

spring-boot:build-info,生成Actuator使用的構建信息文件build-info.properties

2. 配置pom.xml文件

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>1.5.4.RELEASE</version></plugin></plugins>
</build>

二 應用場景

1 重新打包應用

為了重新打包應用,只需要在pom文件中的plugin配置中如下:

<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions>
</plugin>
2 運行應用程序

插件包含了一個run目標,該目標能夠從命令行執行應用程序: mvn spring-boot:run

默認情況下,應用從Maven的JVM運行。如果需要在分支中運行,則指定fork選項。如果指定了jvmArguments或者agent參數,分支進程也會執行。

如果需要制定某些JVM參數(如為了debug),可以使用jvmArguments參數,更多細節參考 調試應用 一章。方便起見,為了啟用總則(profiles),可以使用特定(profiles)屬性來處理,參考 指定使用的配置文件 一章。

Spring Boot 1.3已經推出了devtools,它是提升使用Spring Boot應用開發時經驗的一個模塊。啟用該模塊,僅僅在項目中添加如下配置即可:

org.springframework.boot spring-boot-devtools 1.3.0.BUILD-SNAPSHOT true

目前最新是2.0.0.BUILD-SNAPSHOT了。

當devtools運行時,會在重新編譯應用時進行檢測變化并且自動刷新。這不僅包括資源文件,也包括代碼。它也提供了一個激活的可以重加在的服務器,所以不管任何改變都會自動出發瀏覽器刷新。

devtools也可配置成僅僅靜態資源改變時刷新瀏覽器(也就是忽略代碼的改變),僅僅增加如下配置:

spring.devtools.remote.restart.enabled=false

在devtools之前,該插件已經默認支持資源的及時刷新(hot refreshing),為了支持devtools功能,該插件功能已經被禁用。但是可以隨時恢復該功能,恢復功能配置如下;

<build>
……<plugins>……<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>1.3.0.BUILD-SNAPSHOT</version><configuration><addResources>true</addResources></configuration></plugin>……</plugins>……
</build>

當啟用addResources配置時,任意src/main/resources文件夾在應用運行時將被添加到應用的類路徑,同時任意target/class中發現重復的資源將被移除。這將在發布web應用時使資源及時刷新非常有用。例如,當使用HTML,CSS和JavaScript文件時,不用重新編譯應用就可以立馬看到變化。這對前端開發人員不用下載安裝Java IDE就可以工作也是一種非常有用的方式。

需要注意的是,該特性的副作用是在構建時資源過濾不起作用

為了與repackage目標保持一致,run目標在構件類路徑下文件時將排除在配置依賴時排除的依賴配置。更詳細的的請參考 排除一個依賴 章節。

有時候在運行應用時包含測試依賴也是非常有用的。例如,在測試模式下使用根目錄類運行應用。如果希望這樣做,可以設置useTestClasspath參數的值為true。注意:盡在運行應用時生效:重新打包目標將不會增加測試依賴到結果jar和war包中。

3 使用集成測試

雖然可以很容易從測試(測試套件)本身啟動Spring Boot程序,但可能需要在構建自身來處理。為了確信圍繞集成測試的Spring Boot應用的生命周期被合適的管理,可以使用start和stop目標。如下配置:

<build>
……<plugins>……<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>1.3.0.BUILD-SNAPSHOT</version><executions><execution><id>pre-integration-test</id><goals><goal>start</goal></goals></execution><execution><id>post-integration-test</id><goals><goal>stop</goal></goals></execution></executions></plugin>……</plugins>……
</build>

這樣的設置現在可以使用failsafe-plugin來運行你的集成測試,正如你所期待的哪樣。

更多詳細細節,參 考隨機端口的集成測試的。

4 自定義分類重打包

默認情況下,repackage目標將使用可執行的構件來替代原始的構件。如果希望保留原是構件,并且也使用不同的分類來附屬保留可執行的構件,可以配置如下:

說明:如果不適用repackage目標,那么maven執行package命令生成的jar包只有一個,名稱為pom.xml里面配置的name(artifactId)-version.jar

如果加入了repackage配置,則maven打包生成的jar包會被重命名為name-version.jar.original,使用repackage重新打包生成的jar包名稱為name-version.jar,

下面的配置就是如果希望保留原始構件生成的jar包名稱不變,同時也想保留repackage打包生成的jar包,可以自定義命名。

<project><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>1.3.0.BUILD-SNAPSHOT</version><executions><execution><goals><goal>repackage</goal></goals><configuration><classifier>exec</classifier></configuration></execution></executions></plugin></plugins></build>
</project>

如上配置,那么使用repackage重新生成的包的名稱就是name-version-exec.jar,就是在version后面追加了configuration節點中的classifier節點中的值,該值是自定義的。但是如果classifier節點中什么值都不寫,那么就和默認的repackage配置一樣,即原始的構件為name-version.jar.original,repackage打包的jar為name-version.jar

5 排除依賴

默認情況下,repackage和run目標都會包含所有provided scope的依賴。基于boot的項目應該考慮provided scope的依賴就像容器所需要的依賴包來使應用可以運行。

**有三種方式可以排除運行時被打包使用的依賴
1、通過指定groupId和artifactId來排除依賴(如果需要可以指定classifier,這是可選的)
2、通過指定artifactId,來排除所有匹配的依賴
3、通過指定groupId,來排除所有屬于該group的依賴
如下通過指定groupId和artifactId排除依賴 **

<project><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>1.3.0.BUILD-SNAPSHOT</version><configuration><excludes><exclude><groupId>com.foo</groupId><artifactId>bar</artifactId></exclude></excludes></configuration></plugin></plugins></build>
</project>

如上配置就會排除對com.foo:bar的jar包

如下通過指定artifactId,來排除artifactId與此匹配的所有依賴

<project><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>1.3.0.BUILD-SNAPSHOT</version><configuration><excludeArtifactIds>my-lib,another-lib</excludeArtifactIds></configuration></plugin></plugins></build>
</project>

如上配置就會排除所有artifactId為my-lib和another-lib的jar包

如下通過指定groupId,來排除groupId與此匹配的所有依賴

<project><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>1.3.0.BUILD-SNAPSHOT</version><configuration><excludeGroupIds>com.foo</excludeGroupIds></configuration></plugin></plugins></build>
</project>

如上配置則排除掉所有groupId為com.foo的jar包

###6 調試應用

默認情況下,run目標和mvn命令是在同一個進程中執行的,除非jvm參數或者客戶端明確指定。可以通過使用fork屬性明確的開啟或者關閉是否在同一進程中執行。
如果需要fork這個進程并且進行調試,可以添加需要的JVM參數來開啟遠程調試。如下配置為掛起進程,直到有調試請求從5005端口進入

<project><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>1.3.0.BUILD-SNAPSHOT</version><configuration><jvmArguments>-Xdebug -Xrunjdwp:transport=dt_sorket,server=y,suspend=y,address=5005
</jvmArguments></configuration></plugin></plugins></build>
</project>

需要注意的是,只要你指定了這些JVM參數,這個進程就會自動被fork。這些jvm擦書也可以在命令行中指定,確認書寫正確:

mvn spring-boot:run -Drun.jvmArguments=“-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005”

7 集成測試的隨機端口

Spring Boot集成測試的一個好特性是它能夠為Web應用分配一個空閑端口。當start目標插件使用時,Spring Boot應用是被分離執行的,這讓傳遞給集成測試程序本身實際的端口變得非常困難

如下的配置展示如何使用build-help-plugin插件達到相同的特性。

<project><build><plugins><plugin><groupId>org.codehaus.mojo</groupId><artifactId>build-helper-maven-plugin</artifactId><executions><execution><id>reserve-tomcat-port</id><goals><goal>reserve-network-port</goal></goals><phase>process-resources</phase><configuration><portNames><portName>tomcat.http.port</portName></portNames></configuration></execution></executions></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>1.3.0.BUILD-SNAPSHOT</version><executions><execution><id>pre-integration-test</id><goals><goal>start</goal></goals><configuration><arguments><argument>--server.port={tomcat.http.port}</test.server.port></systemPropertyVariables></configuration></plugin></plugins></build>

現在可以在任意的集成測試中查詢test.server.port系統屬性來給server創建一個合適的url。

8 指定使用的配置文件

一個特定應用使用的配置文件可以通過profiles參數指定。如下配置啟動了foo和bar兩個配置文件:

<project><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>1.3.0.BUILD-SNAPSHOT</version><configuration><profiles><profile>foo</profile><profile>bar</profile></profiles></configuration></plugin></plugins></build>
</project>

使用哪個配置文件也可以通過命令行參數配置,如果有多個,需要使用都好將他們隔開:

mvn spring-boot:run -Drun.profiles=bar,foo

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/896563.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896563.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896563.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

eMMC安全簡介

1. 引言 術語“信息安全”涵蓋多種不同的設計特性。一般而言&#xff0c; 信息安全是指通過實踐防止信息遭受未經授權的訪問、使用、披露、中斷、篡改、檢查、記錄或銷毀。 信息安全的三大核心目標為 機密性&#xff08;Confidentiality&#xff09;、完整性&#xff08;Integr…

Python 數據結構 2.時間復雜度和空間復雜度

Life is a journey —— 25.2.28 一、引例&#xff1a;窮舉法 1.單層循環 所謂窮舉法&#xff0c;就是我們通常所說的枚舉&#xff0c;就是把所有情況都遍歷了的意思。 例&#xff1a;給定n&#xff08;n ≤ 1000&#xff09;個元素ai&#xff0c;求其中奇數有多少個 判斷一…

FFmpeg-chapter3-讀取視頻流(原理篇)

ffmpeg網站&#xff1a;About FFmpeg 1 庫介紹 &#xff08;1&#xff09;libavutil是一個包含簡化編程函數的庫&#xff0c;包括隨機數生成器、數據結構、數學例程、核心多媒體實用程序等等。 &#xff08;2&#xff09;libavcodec是一個包含音頻/視頻編解碼器的解碼器和編…

面試(進階) —虛擬列表在什么場景使用,如何實現?

面試(進階) —虛擬列表在什么場景使用&#xff0c;如何實現&#xff1f; 在前端開發中&#xff0c;當需要渲染大量數據時&#xff0c;傳統的渲染方式往往會遇到性能瓶頸。一次性將大量數據渲染到DOM中&#xff0c;不僅會導致頁面加載緩慢&#xff0c;還可能占用大量內存&#x…

Linux Mem -- 關于AArch64 MTE功能的疑問

目錄 1.虛擬地址和物理地址映射完成后&#xff0c;才可以設置虛擬地址對應的memory tag &#xff1f; 2.各種memory allocator中的address tag從哪來&#xff0c;怎么產生&#xff1f; 2.1 vmalloc allocator 2.2 slub分配器 2.3 用戶可以指定IRG指令產生的address tag 3.kasan…

python-leetcode-顏色分類

75. 顏色分類 - 力扣&#xff08;LeetCode&#xff09; class Solution:def sortColors(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""low, mid, high 0, 0, len(nums) - 1while mid < h…

ArcGIS Pro技巧實戰:高效矢量化天地圖地表覆蓋圖

在地理信息系統&#xff08;GIS&#xff09;領域&#xff0c;地表覆蓋圖的矢量化是一項至關重要的任務。天地圖作為中國國家級的地理信息服務平臺&#xff0c;提供了豐富且詳盡的地表覆蓋數據。然而&#xff0c;這些數據通常以柵格格式存在&#xff0c;不利于進行空間分析和數據…

【江科大STM32】TIM輸出比較(學習筆記)

本章圖片文字內容也為重要知識&#xff0c;請馬住&#xff01; 輸出比較簡介 OC&#xff08;Output Compare&#xff09;輸出比較輸出比較可以通過比較CNT與CCR寄存器值的關系&#xff0c;來對輸出電平進行置1、置0或翻轉的操作&#xff0c;用于輸出一定頻率和占空比的PWM波形…

【網絡安全 | 漏洞挖掘】利用文件上傳功能的 IDOR 和 XSS 劫持會話

未經許可,不得轉載。 本文涉及漏洞均已修復。 文章目錄 前言正文前言 想象這樣一個場景:一個專門處理敏感文檔的平臺,如保險理賠或身份驗證系統,卻因一個設計疏漏而成為攻擊者的“金礦”。在對某個保險門戶的文件上傳功能進行測試時,我意外發現了一個可導致大規模賬戶接管…

飛算 JavaAI 如何讓微服務開發快人一步?

在當今競爭激烈的軟件開發領域&#xff0c;微服務架構因其靈活性和可擴展性備受青睞。然而&#xff0c;微服務開發過程復雜&#xff0c;從需求分析到最終代碼實現&#xff0c;每個環節都需要耗費大量時間和精力。飛算 JavaAI 的出現&#xff0c;猶如一道曙光&#xff0c;為開發…

Python—Excel全字段轉json文件(極速版+GUI界面打包)

目錄 專欄導讀1、背景介紹2、庫的安裝3、核心代碼4、完整代碼(簡易版)5、進階版(GUI)總結專欄導讀 ?? 歡迎來到Python辦公自動化專欄—Python處理辦公問題,解放您的雙手 ?????? 博客主頁:請點擊——> 一晌小貪歡的博客主頁求關注 ?? 該系列文章專欄:請點擊——…

2025年光電科學與智能傳感國際學術會議(ICOIS 2025)

重要信息 官網&#xff1a;www.ic-icois.org 時間&#xff1a;2025年3月14-16日 地點&#xff1a;中國-長春 簡介 2025年光電科學與智能傳感國際學術會議&#xff08;ICOIS 2025&#xff09;將于2025年3月14-16日在中國-長春隆重召開。會議將圍繞“光學光電”、“智能傳感”…

企業微信里可以使用的企業內刊制作工具,FLBOOK

如何讓員工及時了解公司動態、行業資訊、學習專業知識&#xff0c;并有效沉淀企業文化&#xff1f;一份高質量的企業內刊是不可或缺的。現在讓我來教你該怎么制作企業內刊吧 1.登錄與上傳 訪問FLBOOK官網&#xff0c;注冊賬號后上傳排版好的文檔 2.選擇模板 FLBOOK提供了豐富的…

YOLOv5 + SE注意力機制:提升目標檢測性能的實踐

一、引言 目標檢測是計算機視覺領域的一個重要任務&#xff0c;廣泛應用于自動駕駛、安防監控、工業檢測等領域。YOLOv5作為YOLO系列的最新版本&#xff0c;以其高效性和準確性在實際應用中表現出色。然而&#xff0c;隨著應用場景的復雜化&#xff0c;傳統的卷積神經網絡在處…

跟我學C++中級篇——定時器的設計

一、定時器 談到定時器&#xff0c;理論上講是各種語言和各種設計都無法避開的一個技術點。對于定時器來說&#xff0c;表面上就是一種時間間隔的處理約定&#xff0c;但對程序來說&#xff0c;可能就是設計層面、接口層面和庫或框架以及系統應用的一個大集合。不同的系統&…

智能機器人加速進化:AI大模型與傳感器的雙重buff加成

Deepseek不僅可以在手機里為你解答現在的困惑、占卜未來的可能&#xff0c;也將成為你的貼心生活幫手&#xff01; 2月21日&#xff0c;追覓科技旗下Dreamehome APP正式接入DeepSeek-R1大模型&#xff0c;2月24日發布的追覓S50系列掃地機器人也成為市面上首批搭載DeepSeek-R1的…

PostgreSQL10 邏輯復制實戰:構建高可用數據同步架構!

PostgreSQL10 邏輯復制實戰&#xff1a;打造高可用數據同步架構&#xff01; 概述 PostgreSQL 10 引入了邏輯復制&#xff08;Logical Replication&#xff09;&#xff0c;為數據庫高可用和數據同步提供了更靈活的選擇。PostgreSQL 復制機制主要分為物理復制和邏輯復制兩種&…

LVS+Keepalived高可用群集配置案例

以下是一個 LVSKeepalived 高可用群集配置案例&#xff1a; 1、環境準備 LVS 主調度器&#xff08;lvs1&#xff09;&#xff1a;IP 地址為 192.168.8.101&#xff0c;心跳 IP 為 192.168.4.101LVS 備調度器&#xff08;lvs2&#xff09;&#xff1a;IP 地址為 192.168.8.102…

原生家庭獨立的藝術:找到自我與家庭的平衡點

原生家庭獨立的藝術&#xff1a;找到自我與家庭的平衡點 &#x1f331; 引言 &#x1f308; 小林剛剛和父母結束了一次激烈的電話對峙。父母堅持認為他應該回到家鄉工作&#xff0c;“這樣我們也能照顧你”&#xff0c;而他則努力解釋自己在大城市的職業規劃。掛掉電話后&…

Java進階——注解一文全懂

Java注解&#xff08;Annotation&#xff09;是一種強大的元數據機制&#xff0c;為代碼提供了附加信息&#xff0c;能簡化配置、增強代碼的可讀性和可維護性。本文將深入探討 Java 注解的相關知識。首先闡述了注解的基礎概念&#xff0c;包括其本質、作用以及核心分類&#xf…