成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring Boot 多種生產(chǎn)打包方式詳解

開(kāi)發(fā)
生產(chǎn)上發(fā)布 Spring Boot 項(xiàng)目時(shí),流程頗為繁瑣且低效。為解決這一痛點(diǎn),我打算把依賴(lài)庫(kù)以及配置文件從項(xiàng)目主體里剝離出來(lái),后續(xù)部署時(shí),只需發(fā)布核心代碼就行。

生產(chǎn)上發(fā)布 Spring Boot 項(xiàng)目時(shí),流程頗為繁瑣且低效。但凡代碼有一丁點(diǎn)改動(dòng),就得把整個(gè)項(xiàng)目重新打包部署,耗時(shí)費(fèi)力不說(shuō),生成的 JAR 包還特別臃腫,體積龐大。每次更新項(xiàng)目,光是上傳這大文件就得花費(fèi)不少時(shí)間,嚴(yán)重影響工作節(jié)奏。

為解決這一痛點(diǎn),我打算把依賴(lài)庫(kù)以及配置文件(lib 文件夾下的那些 jar 包,還有config下的applacation.yml等文件)從項(xiàng)目主體里剝離出來(lái),后續(xù)部署時(shí),只需發(fā)布核心代碼就行,這樣既能加快部署速度,又能減輕文件傳輸負(fù)擔(dān),讓項(xiàng)目更新變得輕松便捷

方法一:插件spring-boot-maven-plugin

(1) 項(xiàng)目應(yīng)用的配置文件排除 統(tǒng)一打包到config目錄下

利用springboot中resource插件來(lái)排除配置,并統(tǒng)一打包到config目錄下:

<resources>
  <resource>
      <directory>src/main/resources</directory>
       <!--filerting設(shè)置為true,則打包過(guò)程中會(huì)對(duì)這些文件進(jìn)行過(guò)濾處理-->
       <filtering>true</filtering>
       <!--指定目標(biāo)路徑為config-->
      <targetPath>${project.build.directory}/config</targetPath>
      <includes>
      <!--使用通配符-->
         <include>**/*.properties</include>
         <include>**/*.yml</include>
         <include>**/*.xml</include>
     <include>mapper/*.xml</include>
      <!-- 這里可以根據(jù)你實(shí)際想要包含的配置文件類(lèi)型來(lái)添加更多的include配置 -->
   </includes>
  </resource>
</resources>

(2) 把我們寫(xiě)代碼打包可執(zhí)行jar,并排除依賴(lài)jar包

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
   <!--項(xiàng)目的啟動(dòng)類(lèi),如果有多個(gè)main就必須指定,沒(méi)有可以缺失
     <mainClass>XXXXX.TwinWebApplication</mainClass>-->
    <!--解決windows命令行窗口中文亂碼-->
     <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
     <layout>ZIP</layout>
     <!--配置需要打包進(jìn)項(xiàng)目的jar-->
     <includes>
     <!--填寫(xiě)需要打包所需要的依賴(lài) 。沒(méi)有匹配上任何jar包機(jī)排除依賴(lài)-->
        <include>
             <groupId>no-exists-jar</groupId>
            <artifactId>non-exists-jar</artifactId>
         </include>
      </includes>
  </configuration>
  <executions>
    <execution>
         <goals>
         <!-- 表示當(dāng)運(yùn)行mavn package打包時(shí),使用Springboot插件打包 -->
           <goal>repackage</goal>
       </goals>
    </execution>
  </executions>
</plugin>

(3) 配置依賴(lài)的jar包 統(tǒng)一打包lib目錄

<!--此插件用于將依賴(lài)包抽出-->
<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-dependency-plugin</artifactId>
   <executions>
   <execution>
      <id>copy-dependencies</id>
      <phase>package</phase>
      <goals>
         <goal>copy-dependencies</goal>
      </goals>
     <configuration>
          <outputDirectory>${project.build.directory}/lib</outputDirectory>
          <excludeTransitive>false</excludeTransitive>
          <stripVersion>false</stripVersion>
          <includeScope>runtime</includeScope>
      </configuration>
    </execution>
  </executions>
</plugin>

打包后目錄結(jié)構(gòu),如下圖所示:

執(zhí)行命令 java -jar -Dloader.path=./lib -jar xxx.jar

注意 springboot啟動(dòng)時(shí)候會(huì)優(yōu)先讀取config目錄下配置文件 所以這里不用指定-Dspring.config.locatinotallow=XX.yml文件

注意 例如日志文件配置以及mybits等配置文件 可以配成絕對(duì)路徑 如下所示:

方法二 使用maven-jar-plugin插件實(shí)現(xiàn)

(1) 使用插件maven-resources-plugin處理配置文件打包到config目錄

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <configuration>
       <encoding>UTF-8</encoding>
    </configuration>
   <executions>
      <execution>
          <id>copy-dependencies</id>
          <phase>package</phase>
          <goals>
             <goal>copy-resources</goal>
          </goals>
  <configuration>
<!--配置文件打包成config目錄下 -->
      <outputDirectory>${project.build.directory}/twin-web/config</outputDirectory>
      <resources>
      <resource>
      <directory>src/main/resources</directory>
      </resource>
      </resources>
     </configuration>
  </execution>
</executions>
</plugin>

(2) 使用maven-jar-plugin 打包可執(zhí)行jar 并排除依賴(lài)

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-jar-plugin</artifactId>
   <configuration>
      <outputDirectory>
          <!--輸入打包可執(zhí)行的jar到twin-web\libs\下-->
          ${project.build.directory}/twin-web/
       </outputDirectory>
      <archive>
        <addMavenDescriptor>false</addMavenDescriptor>
       <manifest>
             <addClasspath>true</addClasspath>
         <!-- 增加執(zhí)行啟動(dòng)jar的依賴(lài)jar包目錄前綴-->
           <classpathPrefix>./libs/</classpathPrefix>
         <!-- 指定啟動(dòng)類(lèi)-->
            <mainClass>com.keqing.twinweb.TwinWebApplication</mainClass>
        </manifest>
        <manifestEntries>
          <!-- 增加配置文件的classpath-->
          <Class-Path>./config/</Class-Path>
      </manifestEntries>
</archive>
<!-- 排除配置文件-->
     <excludes>
         <exclude>*.yml</exclude>
         <exclude>mapper/**</exclude>
         <exclude>*.xml</exclude>
     </excludes>
  </configuration>
</plugin>

(3) 使用maven-dependency-plugin 打包libs目錄下

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-dependency-plugin</artifactId>
   <executions>
   <execution>
      <id>copy-dependencies</id>
      <phase>package</phase>
      <goals>
         <goal>copy-dependencies</goal>
      </goals>
     <configuration>
          <outputDirectory>${project.build.directory}/twin-web/libs</outputDirectory>
          <excludeTransitive>false</excludeTransitive>
          <stripVersion>false</stripVersion>
          <includeScope>runtime</includeScope>
      </configuration>
    </execution>
  </executions>
</plugin>

使用package打包后的目錄

查看自己打包后jar目錄,注意這種打包方式弊端,按照一定約定格式規(guī)范固定了,一旦依賴(lài)jar包(包括配置文件目錄等)發(fā)生變化就必須重新打包

啟動(dòng)程序java -jar xxx.jar

方式三 使用maven-assembly-plugin打包

maven-assembly-plugin 是 Maven 中的一個(gè)插件,它允許用戶(hù)將項(xiàng)目的輸出以及依賴(lài)、模塊、站點(diǎn)文檔和其他文件打包成一個(gè)可發(fā)布的格式,例如 zip、tar.gz、jar 等。以下是使用 maven-assembly-plugin 的一些優(yōu)勢(shì):

  • 自定義打包格式: maven-assembly-plugin 允許你通過(guò)定義描述符文件(descriptor)來(lái)完全自定義打包的內(nèi)容和格式。你可以選擇包含或排除特定的文件和目錄。
  • 一鍵打包: 通過(guò)一個(gè)簡(jiǎn)單的 Maven 命令,你可以創(chuàng)建一個(gè)包含所有必需依賴(lài)的單一歸檔文件,這使得分發(fā)和部署變得非常簡(jiǎn)單。
  • 多環(huán)境支持: 可以為不同的環(huán)境(開(kāi)發(fā)、測(cè)試、生產(chǎn))創(chuàng)建不同的打包配置,使得環(huán)境遷移更加容易。
  • 依賴(lài)管理: 插件會(huì)自動(dòng)處理項(xiàng)目依賴(lài),將它們打包到最終的歸檔文件中,無(wú)需手動(dòng)管理。
  • 模塊化項(xiàng)目支持: 對(duì)于多模塊項(xiàng)目,maven-assembly-plugin 可以將所有模塊的輸出合并到一個(gè)歸檔文件中。
  • 預(yù)配置的描述符: 插件提供了一些預(yù)定義的描述符,如 bin、jar-with-dependencies 等,可以直接使用,無(wú)需自定義。
  • 靈活性: 你可以通過(guò)修改描述符文件來(lái)調(diào)整打包行為,以適應(yīng)不同的需求。
  • 集成性: maven-assembly-plugin 與 Maven 生態(tài)系統(tǒng)緊密集成,可以與其他 Maven 插件協(xié)同工作。
  • 文檔和社區(qū)支持: 由于 maven-assembly-plugin 是 Maven 的一部分,因此有廣泛的文檔和社區(qū)支持。

(1) 項(xiàng)目應(yīng)用的配置文件排除

<resources>
  <resource>
         <directory>src/main/resources</directory>
             <!--filerting設(shè)置為true,則打包過(guò)程中會(huì)對(duì)這些文件進(jìn)行過(guò)濾處理-->
          <filtering>true</filtering>
         <includes>
             <!--使用通配符-->
            <include>**/*.properties</include>
            <include>**/*.yml</include>
            <include>**/*.xml</include>
           <include>mapper/*.xml</include>
        <!-- 這里可以根據(jù)你實(shí)際想要包含的配置文件類(lèi)型來(lái)添加更多的include配置 -->
        </includes>
   </resource>
</resources>

(2) 配置spring-boot-maven-plugin

<plugin>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-maven-plugin</artifactId>
   <configuration>
    <!--項(xiàng)目的啟動(dòng)類(lèi),如果有多個(gè)main就必須指定,沒(méi)有可以缺失
         <mainClass>XXXXX.TwinWebApplication</mainClass>-->
        <!--解決windows命令行窗口中文亂碼-->
        <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
        <layout>ZIP</layout>
           <!--配置需要打包進(jìn)項(xiàng)目的jar-->
       <includes>
        <!--填寫(xiě)需要打包所需要的依賴(lài) 。沒(méi)有匹配上任何jar包機(jī)排除依賴(lài)-->
          <include>
          <groupId>no-exists-jar</groupId>
          <artifactId>non-exists-jar</artifactId>
          </include>
      </includes>
   </configuration>
   <executions>
         <execution>
           <goals>
                 <!-- 表示當(dāng)運(yùn)行mavn package打包時(shí),使用Springboot插件打包 -->
              <goal>repackage</goal>
          </goals>
      </execution>
  </executions>
</plugin>

(3) 引入springboot里約定maven-assembly-plugin

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
<!-- 打包文件名字不包含 assembly.xml 中 id -->
      <appendAssemblyId>false</appendAssemblyId>
      <descriptors>
      <!--項(xiàng)目所在目錄配置文件的 assembly.xml文件 -->
        <descriptor>assembly.xml</descriptor>
      </descriptors>
  </configuration>
<executions>
   <execution>
   <id>make-assembly</id>
   <phase>package</phase>
   <goals>
          <goal>single</goal>
    </goals>
    </execution>
  </executions>
</plugin>

配置assembly.xml文件

<assembly>
   <!-- 打包文件名的標(biāo)識(shí)符,用來(lái)做后綴-->
    <id>make-assembly</id>
    <!-- 打包的類(lèi)型,如果有N個(gè),將會(huì)打N個(gè)類(lèi)型的包 -->
   <formats>
      <format>tar.gz</format>
      <format>zip</format>
   </formats>
     <!-- 壓縮包下是否生成和項(xiàng)目名相同的根目錄 -->
   <includeBaseDirectory>true</includeBaseDirectory>
     <!-- 用來(lái)設(shè)置一組文件在打包時(shí)的屬性。-->
  <fileSets>
   <!-- 0755->即用戶(hù)具有讀/寫(xiě)/執(zhí)行權(quán)限,組用戶(hù)和其它用戶(hù)具有讀寫(xiě)權(quán)限;-->
    <!-- 0644->即用戶(hù)具有讀寫(xiě)權(quán)限,組用戶(hù)和其它用戶(hù)具有只讀權(quán)限;-->
    <!-- 將src/bin目錄下的jar啟動(dòng)腳本輸出到打包后的目錄中 -->
    <fileSet>
     <!--lineEnding選項(xiàng)可用于控制給定的行結(jié)束文件 -->
       <lineEnding>unix</lineEnding>
       <directory>${basedir}/bin</directory>
       <outputDirectory>${file.separator}</outputDirectory>
       <fileMode>0755</fileMode>
       <includes>
         <include>**.sh</include>
         <include>**.bat</include>
      </includes>
   </fileSet>
<!-- 把項(xiàng)目的配置文件,打包進(jìn)壓縮文件的config目錄 -->
   <fileSet>
      <directory>${basedir}/src/main/resources</directory>
      <outputDirectory>config</outputDirectory>
      <fileMode>0644</fileMode>
      <includes>
           <include>*.properties</include>
           <include>*.yml</include>
          <include>*.xml</include>
         <include>mapper/*.xml</include>
      </includes>
   </fileSet>
   <!-- 把項(xiàng)目自己編譯出來(lái)的jar文件,打包進(jìn)zip文件的根目錄 -->
    <fileSet>
      <directory>${project.build.directory}</directory>
      <outputDirectory>${file.separator}</outputDirectory>
      <includes>
          <include>*.jar</include>
      </includes>
   </fileSet>
 </fileSets>
<!-- 依賴(lài)包的拷貝-->
<dependencySets>
   <dependencySet>
     <unpack>false</unpack>
    <useProjectArtifact>true</useProjectArtifact>
    <outputDirectory>lib</outputDirectory>
    <scope>provided</scope>
  </dependencySet>
  <dependencySet>
      <unpack>false</unpack>
      <useProjectArtifact>true</useProjectArtifact>
      <outputDirectory>lib</outputDirectory>
      <scope>system</scope>
  </dependencySet>
  <dependencySet>
     <unpack>false</unpack>
     <useProjectArtifact>true</useProjectArtifact>
     <outputDirectory>lib</outputDirectory>
     <scope>runtime</scope>
  </dependencySet>
</dependencySets>
</assembly>

打包后目錄:

解壓zip目錄查看:

使用命令啟動(dòng)項(xiàng)目java -jar -Dloader.path=./lib -jar xxx.jar

責(zé)任編輯:趙寧寧 來(lái)源: 碼猿技術(shù)專(zhuān)欄
相關(guān)推薦

2024-10-15 16:41:35

2024-01-23 08:47:13

BeanSpring加載方式

2024-10-18 08:00:00

SpringBoot框架開(kāi)發(fā)

2009-06-17 13:53:57

Spring.jar

2010-09-28 09:08:40

Oracle

2021-12-31 13:40:43

Spring Boot熱部署Java

2024-12-16 08:10:00

Spring開(kāi)發(fā)

2017-04-26 11:00:34

Spring BootHelloWorld詳解

2025-02-13 07:45:26

APISpringHTTP

2022-09-02 08:41:20

Spring項(xiàng)目微服務(wù)

2025-02-28 08:14:53

2021-05-07 07:03:33

Spring打包工具

2023-11-01 15:07:51

環(huán)境配置方式

2020-11-02 07:00:29

Spring Boo注解自動(dòng)化

2024-08-13 08:41:18

2024-10-14 17:18:27

2024-11-21 14:42:31

2025-01-15 08:19:12

SpringBootRedis開(kāi)源

2024-10-29 11:27:27

2024-12-06 09:27:28

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲一区日韩 | 亚洲一区二区网站 | 精品一级 | 成人免费视频 | 色欧美片视频在线观看 | 午夜电影合集 | 日韩aⅴ在线观看 | 亚洲一区二区黄 | 国产在线视频在线观看 | 日韩欧美在线视频 | 成人久久网 | 久草资源网站 | 性色av一区二区三区 | 一区二区中文字幕 | 国产精品美女久久久久aⅴ国产馆 | 久久99蜜桃综合影院免费观看 | 日韩国产免费观看 | av一二三四 | 精品国产第一区二区三区 | 亚洲一区视频在线 | 一级黄色av电影 | 日日日日日日bbbbb视频 | 久久91精品久久久久久9鸭 | 男人的天堂视频网站 | 欧美久久久 | 国产精品久久欧美久久一区 | 日韩高清一区 | 神马久久久久久久久久 | 一区二区三区四区日韩 | 亚洲国产一区二区三区在线观看 | 亚洲欧美国产一区二区三区 | 国产亚洲精品精品国产亚洲综合 | 天天爽夜夜爽精品视频婷婷 | 色婷婷在线视频 | 成人在线免费观看 | 午夜一区二区三区视频 | 日韩在线中文字幕 | 国产精品免费大片 | 欧美日韩精品国产 | 精品欧美一区二区中文字幕视频 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 |