最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用maven對springboot項目進行瘦身分離jar的多種處理方案

 更新時間:2024年02月05日 11:22:33   作者:老碼龍  
springboot項目打包一般我們都使用它自帶的spring-boot-maven-plugin插件,這個插件默認(rèn)情況下,會把所有的依賴包全部壓縮到一個jar里面,今天給大家分享幾種方案來如何減小我們的打包文件,需要的朋友可以參考下

前言

springboot項目打包一般我們都使用它自帶的spring-boot-maven-plugin插件,這個插件默認(rèn)情況下,會把所有的依賴包全部壓縮到一個jar里面。在有時這給我們的部署或者更新帶來很多的不方便,有的項目很大,最終的打包文件甚至可以達到幾百M,有時可能我們只修改了一個小bug,更新時卻要上傳幾百M的安裝包,極度不方便,今天給大家分享幾種方案來如何減小我們的打包文件,已方便我們的更新操作。
我們構(gòu)造一個測試項目,具體的依賴如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.6</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

默認(rèn)情況下我們直接運行打包命令:

mvn clean -DskipTests package

完成后,我們檢查文件大?。?/p>

在這里插入圖片描述

有18M,下面我們來進行瘦身處理

一、方案一(修改自帶的spring-boot-maven-plugin插件)

我們可以使用自帶的spring-boot-maven-plugin插件進行修改,然后再配合另外兩個插件,這兩個插件就是:maven-jar-plugin和maven-dependency-plugin,可以輕松完成,下面我們來具體操作。

在pom.xml文件中的plugins節(jié)點下加入下面的配置:

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
            <classesDirectory>target/classes/</classesDirectory>
            <archive>
                <manifest>
                    <mainClass>com.example.testmvnpkgexespringboot.TestApplication</mainClass>
                    <!-- 打包時 MANIFEST.MF文件不記錄的時間戳版本 -->
                    <useUniqueVersions>false</useUniqueVersions>
                    <addClasspath>true</addClasspath>
                    <classpathPrefix>lib/</classpathPrefix>
                </manifest>
                <manifestEntries>
                    <Class-Path>.</Class-Path>
                </manifestEntries>
            </archive>
        </configuration>
    </plugin>
    <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>
                    <type>jar</type>
                    <includeTypes>jar</includeTypes>
                    <outputDirectory>
                        ${project.build.directory}/lib
                    </outputDirectory>
                    <overWriteReleases>false</overWriteReleases>
                    <overWriteSnapshots>false</overWriteSnapshots>
                    <overWriteIfNewer>true</overWriteIfNewer>
                </configuration>
            </execution>
        </executions>
    </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>
            </execution>
        </executions>
    </plugin>
</plugins>

下面進行打包:

mvn clean -DskipTests package

然后再查看文件大?。?/p>

在這里插入圖片描述

我們發(fā)現(xiàn),文件只有102K,而且這里多了一個lib文件,那么要運行這個文件,lib包就是必須的,我們直接運行jar包進行測試:

java -jar pkg-sb.jar

發(fā)現(xiàn)正常啟動,如果我們把lib包刪掉,在運行,這時就會報錯。因此我們在發(fā)布項目的時候,lib和我們自己的jar必須再同級目錄下,當(dāng)然也可以修改maven-jar-plugin中的配置,大家可以自行研究。

最后我們使用assembly來制作一個ZIP發(fā)布包,assembly的配置如下:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>package</id>
    <formats>
        <format>zip</format>
    </formats>
    <includeBaseDirectory>true</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>${project.build.directory}/lib</directory>
            <outputDirectory>\lib</outputDirectory>
        </fileSet>
        <fileSet>
            <directory>${project.build.directory}</directory>
            <outputDirectory>\</outputDirectory>
            <includes>
                <include>pkg-sb.jar</include>
            </includes>
        </fileSet>
        
    </fileSets>
</assembly>

二、方案二(使用spring-boot-thin-maven-plugin插件)

這個插件功能比較強大,如果你的項目想要弄的高大上一點,可以選擇這個插件,我們先看下效果。
首先在項目的pom.xml里面加入下面配置:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot.experimental</groupId>
            <artifactId>spring-boot-thin-layout</artifactId>
            <version>1.0.31.RELEASE</version>
        </dependency>
    </dependencies>
</plugin>
<plugin>
    <groupId>org.springframework.boot.experimental</groupId>
    <artifactId>spring-boot-thin-maven-plugin</artifactId>
    <version>1.0.31.RELEASE</version>
    <executions>
        <execution>
            <!-- Download the dependencies at build time -->
            <id>resolve</id>
            <goals>
                <goal>resolve</goal>
            </goals>
            <inherited>false</inherited>
        </execution>
    </executions>
</plugin>

然后我們直接打包:

mvn clean -DskipTests package

查看打包后的結(jié)果:

在這里插入圖片描述

這里我們看jar包只有12k,比方案一的還小,但是下面多了一個thin文件夾打開再看:

在這里插入圖片描述

最下面的repository就是依賴的jar包。如果我們要運行這個jar,就需要運行thin/root下的Java包:

java -jar target/thin/root/pkg-sb.jar

運行結(jié)果:

2024-01-31 16:51:29.955  INFO 16785 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2024-01-31 16:51:29.955  INFO 16785 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 635 ms
2024-01-31 16:51:30.087  INFO 16785 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2024-01-31 16:51:30.229  INFO 16785 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 12345 (http) with context path ''
2024-01-31 16:51:30.232  INFO 16785 --- [           main] c.e.t.TestApplication                    : Started TestApplication in 1.411 seconds (JVM running for 4.141)

說明啟動正常。

下面我們來講下這個插件的強大之處。

1、spring-boot-thin-maven-plugin的原理其實就是把我們項目中的所有依賴當(dāng)成轉(zhuǎn)換成maven的本地庫

2、如果目標(biāo)機上安裝了maven環(huán)境,我們可以直接來運行jar包,這是這個jar會自動啟動maven來下載我們項目中需要的jar依賴包。你可以使用調(diào)試模式來啟動jar,然后觀察他的啟動過程:

調(diào)試模式啟動:

java -jar -Dthin.debug=true pkg-sb.jar

然后運行情況如下:

[root@localhost test]# java -jar -Dthin.debug=true pkg-sb.jar 
Cached launcher found: /root/.m2/repository
Using launcher: /root/.m2/repository/org/springframework/boot/experimental/spring-boot-thin-launcher/1.0.31.RELEASE/spring-boot-thin-launcher-1.0.31.RELEASE-exec.jar
1月 31, 2024 5:02:20 下午 org.springframework.boot.loader.thin.ThinJarLauncher launch
信息: Version: 1.0.31.RELEASE
1月 31, 2024 5:02:20 下午 org.springframework.boot.loader.thin.PathResolver resolve
信息: Extracting dependencies from: jar:file:/root/test/pkg-sb.jar!/, with profiles []
1月 31, 2024 5:02:20 下午 org.springframework.boot.loader.thin.PathResolver loadProperties
信息: Searching for properties in: jar:file:/root/test/pkg-sb.jar!/
1月 31, 2024 5:02:20 下午 org.springframework.boot.loader.thin.PathResolver loadProperties
信息: Searching for properties in: classpath:/
1月 31, 2024 5:02:20 下午 org.springframework.boot.loader.thin.PathResolver loadProperties
信息: Searching for properties in: file:./
1月 31, 2024 5:02:20 下午 org.springframework.boot.loader.thin.PathResolver extract
信息: Extracting dependencies from: URL [jar:file:/root/test/pkg-sb.jar!/META-INF/maven/org.example/test-sb-lib/pom.xml], with profiles []
1月 31, 2024 5:02:21 下午 org.springframework.boot.loader.thin.MavenSettingsReader loadSettings
信息: No settings found at: /root/.m2/settings.xml
1月 31, 2024 5:02:22 下午 org.springframework.boot.loader.thin.DependencyResolver dependencies
信息: Computing dependencies from pom and properties
1月 31, 2024 5:03:11 下午 org.springframework.boot.loader.thin.DependencyResolver dependencies
信息: Resolved: org.springframework.boot:spring-boot-starter-web:2.2.5.RELEASE=/root/.m2/repository/org/springframework/boot/spring-boot-starter-web/2.2.5.RELEASE/spring-boot-starter-web-2.2.5.RELEASE.jar
1月 31, 2024 5:03:11 下午 org.springframework.boot.loader.thin.DependencyResolver dependencies
信息: Resolved: org.springframework.boot:spring-boot-starter:2.2.5.RELEASE=/root/.m2/repository/org/springframework/boot/spring-boot-starter/2.2.5.RELEASE/spring-boot-starter-2.2.5.RELEASE.jar
1月 31, 2024 5:03:11 下午 org.springframework.boot.loader.thin.DependencyResolver dependencies

這里他自動去下載了我們項目依賴的jar包并自動存放到${user.home}/.m2 下面,

3、我們可以手動指定依賴庫的位置,啟動命令如下:

java -jar -Dthin.debug=true -Dthin.root=. pkg-sb.jar 

這樣他會啟動maven把依賴庫下載到我當(dāng)前的目錄下

4、還可以手動指定去下載依賴庫的maven倉庫地址,命令如下:

java -jar -Dthin.debug=true -Dthin.root=. -Dthin.repo=http://192.168.101.170:8081/repository/maven-public pkg-sb.jar 

這里我們使用了前面我們自己搭建的私有庫,因此我們能很好的去控制項目的運行。

5、也可以采用離線模式去運行,這就需要我們要把打包后產(chǎn)生的依賴一起進行打包,這種方式和方案一的模式一樣,但是這種對目標(biāo)機就沒有maven環(huán)境的依賴,我們再使用assembly來制作一個ZIP的發(fā)布包:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>package</id>
    <formats>
        <format>zip</format>
    </formats>
    <includeBaseDirectory>true</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>${project.build.directory}/thin/</directory>
            <outputDirectory>\</outputDirectory>
        </fileSet>
    </fileSets>
</assembly>

6、spring-boot-thin-maven-plugin的更多用法,大家可以參照官網(wǎng),點擊這里

總結(jié)

1、以上給大家分享了2中瘦身方案,反正各自都有一定的缺點和優(yōu)點,大家根據(jù)實際情況進行選擇

2、方案一比較傳統(tǒng),整個過程中規(guī)中矩,沒什么亮點,但實用性很強,缺點就是如果有新增依賴,在更新的時候就需要更新lib下的jar包,需要把新增的加入進去。

3、方案二很有創(chuàng)意,而且功能很強大,能玩出很多姿勢來,如果采用離線模式也就和方案一沒區(qū)別,采用在線模式缺點就是要依賴maven環(huán)境,但是也可以將maven和項目整個打包,然后編寫腳本來實現(xiàn)自帶maven環(huán)境。大家可以自己去嘗試。

4、這兩種方式都能實現(xiàn)對springboot項目的瘦身處理,對更新來說方便很多。

5、如果有自己的私有庫,我們可以把項目進行分模塊化處理,核心業(yè)務(wù)用一個單獨的jar來實現(xiàn),這樣方案二能利用maven實現(xiàn)優(yōu)雅更新

6、雖然有的同學(xué)會想到利用docker來運行,對更新來說也很方便,其實方式二也將maven環(huán)境打入docker鏡像,然后利用在線模式來運行,這樣可以大大減少docker鏡像的大小,后面的章節(jié)我們可以繼續(xù)來研究

以上就是使用maven對springboot項目進行瘦身分離jar的多種處理方案的詳細內(nèi)容,更多關(guān)于maven對springboot瘦身分離的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot自定義注解開發(fā)指南

    SpringBoot自定義注解開發(fā)指南

    在開發(fā)SpringBoot程序的過程中,有可能與其他業(yè)務(wù)系統(tǒng)進行對接開發(fā),獲取封裝公共的API接口等等,下面這篇文章主要給大家介紹了關(guān)于SpringBoot自定義注解的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • JAVA生成xml文件簡單示例

    JAVA生成xml文件簡單示例

    這篇文章主要介紹了JAVA生成xml文件的相關(guān)資料,在Java中可以使用DOM或者JDOM來生成XML文件,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • Java實現(xiàn)購物管理系統(tǒng)

    Java實現(xiàn)購物管理系統(tǒng)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)購物管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Spring注解驅(qū)動之BeanPostProcessor后置處理器講解

    Spring注解驅(qū)動之BeanPostProcessor后置處理器講解

    這篇文章主要介紹了Spring注解驅(qū)動之BeanPostProcessor后置處理器講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 詳談hibernate,jpa與spring?data?jpa三者之間的關(guān)系

    詳談hibernate,jpa與spring?data?jpa三者之間的關(guān)系

    這篇文章主要介紹了hibernate,jpa與spring?data?jpa三者之間的關(guān)系,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringMVC五大組件與執(zhí)行原理分析總結(jié)

    SpringMVC五大組件與執(zhí)行原理分析總結(jié)

    這篇文章主要介紹了SpringMVC五大組件與執(zhí)行原理分析總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-01-01
  • 用java實現(xiàn)的獲取優(yōu)酷等視頻縮略圖的實現(xiàn)代碼

    用java實現(xiàn)的獲取優(yōu)酷等視頻縮略圖的實現(xiàn)代碼

    想獲取優(yōu)酷等視頻縮略圖,在網(wǎng)上沒有找到滿意的資料,參考了huangdijia的PHP版工具一些思路,寫了下面的JAVA版代碼。。其實也可以做成JS版的
    2013-05-05
  • Java?Mybatis框架由淺入深全解析中篇

    Java?Mybatis框架由淺入深全解析中篇

    MyBatis是一個優(yōu)秀的持久層框架,它對jdbc的操作數(shù)據(jù)庫的過程進行封裝,使開發(fā)者只需要關(guān)注SQL本身,而不需要花費精力去處理例如注冊驅(qū)動、創(chuàng)建connection、創(chuàng)建statement、手動設(shè)置參數(shù)、結(jié)果集檢索等jdbc繁雜的過程代碼本文將為大家深入的介紹一下MyBatis的使用
    2022-07-07
  • Java 并發(fā)編程中的鎖機制示例詳解

    Java 并發(fā)編程中的鎖機制示例詳解

    本文探討了Java并發(fā)編程中的鎖機制,包括鎖的基本概念、Java中的鎖類型如synchronized、ReentrantLock、ReadWriteLock、鎖的優(yōu)化策略以及如何避免死鎖,文章強調(diào)了合理選擇和優(yōu)化鎖使用對于提升程序并發(fā)性能的重要性,并提供了實際應(yīng)用中的最佳實踐,感興趣的朋友一起看看吧
    2025-01-01
  • java生成申請單序列號的實現(xiàn)方法

    java生成申請單序列號的實現(xiàn)方法

    申請單序列號一般要求根據(jù)一定的規(guī)則生成后幾位連續(xù)的字符串,下面是我項目中使用的生成序列號的代碼,其中用到了鎖機制,有需要的朋友可以參考一下
    2014-01-01

最新評論

万宁市| 海兴县| 略阳县| 白水县| 藁城市| 巫溪县| 吉林市| 曲周县| 寿阳县| 尉犁县| 牟定县| 年辖:市辖区| 兖州市| 若羌县| 赫章县| 阳江市| 林口县| 鄂托克前旗| 穆棱市| 石河子市| 屏山县| 瓦房店市| 石楼县| 汉中市| 安图县| 新平| 武汉市| 察哈| 巩义市| 大关县| 石柱| 湖州市| 中西区| 锡林浩特市| 理塘县| 宽甸| 绥芬河市| 凤翔县| 通榆县| 塔河县| 平乐县|