SpringBoot项目分离打包

2022-12-28 17:20 栏目: 技术学堂 查看()

1. 为什么要分离打包

SpringBoot项目每次改动,都需要将整个项目重新打包部署,而且打包后的jar包太大,远程部署时很不方便,尤其是网让吃了的时候,整个人能烦死。
所以把lib里面的jar包从项目分离出来,每次部署只需要发布修改过的jar包就行啦。

2. maven分离打包

2.1. 修改pom.xml配置

创建SpringBoot项目后默认的打包配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
复制

2.1.1. 在properties标签中定义变量

<properties>
    <!--依赖输出目录-->
    <lib-path>lib</lib-path>
    <!--springboot默认打包输出目录-->
    <jar-path>jar</jar-path>
    <!--配置文件输出目录-->
    <config-path>config</config-path>
    <!--jar包名称-->
    <final-name>maven-sever-pack-demo</final-name>
    <!--指定启动类-->
    <main-class>cn.xlsea.demo.MavenSeverPackDemoApplication</main-class>
</properties>
复制

2.1.2. 替换SpringBoot默认打包配置

<build>
    <!--项目名称-->
    <finalName>${final-name}</finalName>
    <plugins>
        <!--定义项目的编译环境-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <!--maven的测试用例插件,建议跳过。-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <skip>true</skip>
            </configuration>
        </plugin>
        <!--这个是springboot的默认编译插件,他默认会把所有的文件打包成一个jar-->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>${main-class}</mainClass>
                <fork>true</fork>
                <addResources>true</addResources>
                <outputDirectory>${project.build.directory}/${jar-path}</outputDirectory>
            </configuration>
        </plugin>
        <!-- 打JAR包 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <!-- 不打包资源文件(配置文件和依赖包分开) -->
                <excludes>
                    <exclude>*.yml</exclude>
                </excludes>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <!-- MANIFEST.MF 中 Class-Path 加入前缀 -->
                        <classpathPrefix>${lib-path}/</classpathPrefix>
                        <!-- jar包不包含唯一版本标识 -->
                        <useUniqueVersions>false</useUniqueVersions>
                        <!--指定入口类 -->
                        <mainClass>${main-class}</mainClass>
                    </manifest>
                    <manifestEntries>
                        <!--MANIFEST.MF 中 Class-Path 加入资源文件目录 -->
                        <Class-Path>./${config-path}/</Class-Path>
                    </manifestEntries>
                </archive>
                <outputDirectory>${project.build.directory}</outputDirectory>
            </configuration>
        </plugin>
        <!-- 该插件的作用是用于复制依赖的jar包到指定的文件夹里 -->
        <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-path}/</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <!-- 该插件的作用是用于复制指定的文件 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
                <!-- 复制配置文件 -->
                <execution>
                    <id>copy-resources</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <resources>
                            <resource>
                                <directory>src/main/resources</directory>
                                <includes>
                                    <include>*.yml</include>
                                </includes>
                            </resource>
                        </resources>
                        <outputDirectory>${project.build.directory}/${config-path}</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
复制

2.2. 打包

maven打包

config:配置文件所在目录
lib:依赖所在目录
maven-sever-pack-demo.jar:启动jar包
jar:springboot默认打包插件的jar包

2.3. 启动

运行maven-sever-pack-demo.jar,启动成功:

启动运行

扫二维码与商务沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流

郑重申明:小伙伴科技以外的任何非授权单位或个人,不得使用我公司案例作为工作成功展示!