SpringBoot的repackage和Maven打包命令之間的區別 - Baeldung
Apache Maven是一種廣泛使用的專案依賴項管理工具和專案構建工具。
在過去的幾年中,Spring Boot已經成為構建應用程式的非常流行的框架。還有一個Spring Boot Maven外掛在Apache Maven中提供Spring Boot支援。
我們知道,當我們想使用Maven將應用程式打包在JAR或WAR中時,可以使用mvn package。但是,Spring Boot Maven外掛附帶了一個 重新打包repackage,它也在mvn命令中被呼叫。有時,這兩個mvn命令令人困惑。
mvn package命令將採用編譯後的程式碼並將其打包為可分發格式,如JAR格式檔案,它僅包含來自專案源的資源和已編譯的Java類。
我們可以將此JAR檔案用作另一個專案中的依賴項。但是,即使它是Spring Boot應用程式,我們也不能使用java -jar JAR_FILE執行JAR檔案 。這是因為沒有捆綁執行時依賴項。例如,我們沒有Servlet容器來啟動Web上下文。
要使用簡單的java -jar命令啟動Spring Boot應用程式 ,我們需要構建一個胖JAR。Spring Boot Maven外掛可以幫助我們。
要實現SpringBoot重新打包,我們需要在pom.xml中新增Spring Boot Maven外掛:
<build> <finalName>${project.artifactId}</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> |
重新·打包命令:
mvn clean spring-boot:repackage |
這個命令需要在現有JAR或WAR存檔為源,將專案類重新打包,包括所有專案執行時依賴都包括在一起。這樣,可以使用命令列java -jar JAR_FILE.jar來執行重新打包好的JAR檔案。
因此,我們需要在執行spring-boot:repackage目標之前先構建JAR檔案 :
mvn clean package spring-boot:repackage |
以上命令才是正確重新打包命令。
通過jar tf target/spring-boot-artifacts-2.jar 可以檢查打包好的JAR檔案內容。在重新打包的JAR檔案中,我們不僅具有來自專案的已編譯Java類,而且還具有啟動Spring Boot應用程式所需的所有執行時庫。例如,嵌入式tomcat庫被打包到BOOT-INF / lib 目錄中。
我們可以在pom.xml中配置Spring Boot Maven外掛, 以在Maven生命週期的打包階段重新打包工件 。換句話說,當我們執行MVN包,spring-boot:repackage將自動執行。
<build> <finalName>${project.artifactId}</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> |
本文中的程式碼都可以在GitHub上找到
相關文章
- Apache Spark:資料框,資料集和RDD之間的區別 - BaeldungApacheSpark
- 敏捷和 Scrum 之間的區別敏捷Scrum
- Statement和PreparedStatement之間的區別
- maven打包 package install deploy區別MavenPackage
- @Bean和@Component之間的區別?Bean
- MVC,MVP和MVVM之間的區別MVCMVPMVVM
- reboot和init 6之間的區別boot
- spring、springmvc、springboot、springcloud 之間的聯絡和區別SpringMVCSpring BootGCCloud
- Docker, Dockerfile, 和Docker Compose區別 | BaeldungDocker
- querySelector和getElementById之間的區別
- tali -f 和 tail -F 之間的區別AI
- 公共雲和私有云之間的區別
- 【轉】理解 CI 和 CD 之間的區別
- cookie、 sessionStorage 、localStorage之間的區別和使用CookieSession
- return,continue和break之間的區別
- Maven打包springboot框架的可執行的jarMavenSpring Boot框架JAR
- source和.命令的區別
- Linux和windows系統之間的區別LinuxWindows
- CI和CD之間的真正區別 -Fire CI
- Kata和Kaizen之間的區別是什麼?AI
- Git 和 SVN 之間的五個基本區別Git
- GIT和SVN之間的五個基本區別Git
- 深入瞭解gradle和maven的區別GradleMaven
- su和sudo命令的區別
- source 和export 命令的區別Export
- maven與ant的區別Maven
- Vue中computed、methods和watch之間的區別Vue
- 淺談querySelector和getElementById之間的區別
- 函式節流和去抖之間的區別函式
- [譯] Jquery中 .bind() .live() .delegate() 和 .on() 之間的區別jQuery
- springmvc和springboot的區別SpringMVCSpring Boot
- springboot和springmvc的區別Spring BootSpringMVC
- SpringCloud和SpringBoot的區別GCCloudSpring Boot
- Spring @RequestParam與@PathVariable註釋的區別 | BaeldungSpring
- Oracle與OpenJDK之間的區別OracleJDK
- PrepareStatement與Statement之間的區別REST
- Java NIO和NIO.2有什麼區別? | baeldungJava
- Linux su命令和sudo命令的區別Linux