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
- spring、springmvc、springboot、springcloud 之間的聯絡和區別SpringMVCSpring BootGCCloud
- maven打包 package install deploy區別MavenPackage
- 敏捷和 Scrum 之間的區別敏捷Scrum
- querySelector和getElementById之間的區別
- @Bean和@Component之間的區別?Bean
- return,continue和break之間的區別
- MVC,MVP和MVVM之間的區別MVCMVPMVVM
- Maven打包springboot框架的可執行的jarMavenSpring Boot框架JAR
- SpringCloud和SpringBoot的區別GCCloudSpring Boot
- springboot和springmvc的區別Spring BootSpringMVC
- springmvc和springboot的區別SpringMVCSpring Boot
- Docker, Dockerfile, 和Docker Compose區別 | BaeldungDocker
- 公共雲和私有云之間的區別
- 【轉】理解 CI 和 CD 之間的區別
- Linux和windows系統之間的區別LinuxWindows
- 淺談querySelector和getElementById之間的區別
- tali -f 和 tail -F 之間的區別AI
- idea maven中lifecycle 和 plugins的區別IdeaMavenPlugin
- 深入瞭解gradle和maven的區別GradleMaven
- Kata和Kaizen之間的區別是什麼?AI
- CI和CD之間的真正區別 -Fire CI
- Vue中computed、methods和watch之間的區別Vue
- source 和export 命令的區別Export
- linuxsu和sudo命令的區別Linux
- springboot和ssm開發的區別Spring BootSSM
- IDEA如何用maven打包(介面和命令兩種方式)IdeaMaven
- Spring @RequestParam與@PathVariable註釋的區別 | BaeldungSpring
- maven與ant的區別Maven
- select、poll、epoll之間的區別
- Oracle與OpenJDK之間的區別OracleJDK
- GCD與NSOperation之間的區別GC
- Linux 上的 AppImage、Snap、Flatpak 之間的區別和聯絡LinuxAPP
- [譯] 使用 leanback 的 DiffCallback: 和 DiffUtil 回撥之間的區別
- Linux 命令 su 和 sudo 的區別Linux
- 尋源和採購之間的區別是什麼?
- ASP.NET Core中GetService()和GetRequiredService()之間的區別ASP.NETUI
- .gitkeep是什麼? .gitignore和.gitkeep之間的區別(譯)Git