SpringBoot項目導出jar包及瘦身部署方式
SpringBoot項目使用mvn命令導出可運行jar包
這部分主要是Pom.xml文件的配置,而且主要是<build></build>部分的配置。
我的springboot版本是2.1.4
1、導出包含lib依賴包的可執(zhí)行jar包
<build>
<plugins>
<!--<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>-->
<!-- 編譯插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<mainClass>${start-class}</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 打包插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<!--<appendAssemblyId>false</appendAssemblyId>-->
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<!-- 主程序入口類 -->
<mainClass>cn.zh.demo01.Demo01Application</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<!--<id>make-assembly</id>-->
<id>assemble-all</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>導出這個包大小為27M,感覺如果多個項目都這樣就太占空間了。
所以才有了下面的瘦身。
因為多個項目使用lib依賴包都差不多。
2、導出lib目錄與jar包分離的可運行jar
<build>
<plugins>
<!--<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>-->
<!-- 編譯插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--重寫包含依賴,包含不存在的依賴,jar里沒有pom里的依賴-->
<includes>
<include>
<groupId>null</groupId>
<artifactId>null</artifactId>
</include>
</includes>
<layout>ZIP</layout>
<!--使用外部配置文件,jar包里沒有資源文件-->
<addResources>true</addResources>
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<!--配置jar包特殊標識 配置后,保留原文件,生成新文件 *-run.jar -->
<!--配置jar包特殊標識 不配置,原文件命名為 *.jar.original,生成新文件 *.jar -->
<!--<classifier>run</classifier>-->
</configuration>
</execution>
</executions>
</plugin>
<!-- 打包插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<!--不打包資源文件-->
<!--<excludes>-->
<!--<exclude>*.**</exclude>-->
<!--<exclude>*/*.xml</exclude>-->
<!--</excludes>-->
<archive>
<manifest>
<addClasspath>true</addClasspath>
<!--MANIFEST.MF 中 Class-Path 加入前綴-->
<classpathPrefix>lib/</classpathPrefix>
<!-- 主程序入口類 -->
<mainClass>cn.zh.demo01.Demo01Application</mainClass>
</manifest>
<!--<manifestEntries>-->
<!--<!–MANIFEST.MF 中 Class-Path 加入資源文件目錄–>-->
<!--<Class-Path>./resources/</Class-Path>-->
<!--</manifestEntries>-->
</archive>
</configuration>
</plugin>
<!--拷貝依賴 copy-dependencies-->
<!--也可以執(zhí)行mvn copy-dependencies 命令打包依賴-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.2</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/lib/
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>導出后,lib文件目錄就有26M,我的項目jar包只有幾百K,不錯!
部署及運行
運行命令:java -Dloader.path="lib/" -jar XXXX.jar
loader.path為lib目錄的路徑。
到此又看到springboot的啟動圖標了。。。
但一旦關(guān)閉SSH連接,服務就自動停止了。
于是又上網(wǎng)搜,前輩指出:
nohup java -jar XXX.jar >log.out &; nohup是保證ssh連接關(guān)閉后,jar任然運行的關(guān)鍵 & 相當于后臺運行,你后面還可以輸入命令 >log.out 是輸出日志的地方 ps aux|grep XXX.jar 查看某jar包的運行的進程號
關(guān)閉問題解決,但啟動會報:
nohup: ignoring input and redirecting stderr to stdout
再搜,前輩又指出:
把后面的 “&” 改成 “2>&1 &”,于是把啟動命令改成如下: 解釋如下: 2> 表示把標準錯誤(stderr)重定向,標準輸出(stdout)是1。 尖括號后面可以跟文件名,或者是&1, &2,分別表示重定向到標準輸出和標準錯誤。 2> &1 1> &2 2> stderr.log 1> stdout.log
于是我的啟動命令改為:
nohup java -Dloader.path="../lib/" -jar demo01-0.0.1-SNAPSHOT.jar >log.out 2>&1 &
完美解決
關(guān)于Nginx的代理配置,可以上網(wǎng)搜一下,很多前輩的分享,在此不多說了!
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot使用LibreOffice實現(xiàn)高保真Word轉(zhuǎn)PDF的方法
本文介紹了在SpringBoot中使用LibreOffce實現(xiàn)高保真Word轉(zhuǎn)PDF的方法,首先詳細說明了Windows、Mac、Linux系統(tǒng)及Docker環(huán)境下LibreOffice的安裝步驟和常見問題解決方案,需要的朋友可以參考下2026-02-02
教你如何把Eclipse創(chuàng)建的Web項目(非Maven)導入Idea
這篇文章主要介紹了教你如何把Eclipse創(chuàng)建的Web項目(非Maven)導入Idea,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
struts1之簡單mvc示例_動力節(jié)點Java學院整理
這篇文章主要介紹了struts1之簡單mvc示例的相關(guān)資料,需要的朋友可以參考下2017-09-09
Spring中的FactoryBean實現(xiàn)原理詳解
這篇文章主要介紹了Spring中的FactoryBean實現(xiàn)原理詳解,spring中有兩種類型的Bean,一種是普通的JavaBean,另一種就是工廠Bean(FactoryBean),這兩種Bean都受Spring的IoC容器管理,但它們之間卻有一些區(qū)別,需要的朋友可以參考下2024-02-02

