我是靠谱客的博主 魔幻美女,最近开发中收集的这篇文章主要介绍Maven打包SpringBoot项目,排除第三方依赖包,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题背景

Spring Boot 项目一般会依赖较多的包括 Spring 在内的第三方 jar 包,直接打可运行 jar 包,文件大小往往会达到100M甚至更大;

一个包含数个业务模块的微服务项目,全部可运行的 jar 包加起来总共可达数百M甚至上G;

我们在重复部署测试或者生产环境的时候,每次都要上传包含所有依赖 jar 包的可运行 jar 文件,效率比较低;

期望目标

下面是经过验证的 maven 配置,Spring Boot 项目打包时,只包含我们自己的开发的代码内容,大小仅仅之后数百 kb,所依赖的第三方 jar 则复制到指定的目录下;

这样我们可以只需要上传一次第三方 jar,每次修改代码重新部署时,只上传仅包含我们开发代码的 jar 文件,大大提高了部署效率。

解决方法

maven 的 pom 配置如下,${} 变量根据自己的项目进行替换,第三方 jar 指定到 target/lib 目录下:

<plugins>
    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>${java.version}</source>
            <target>${java.version}</target>
            <encoding>UTF-8</encoding>
        </configuration>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
            <!-- 跳过单元测试 -->
            <skipTests>true</skipTests>
        </configuration>
    </plugin>

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
            <!-- 复制第三方 jar 到项目目录下的 target/lib/ 下 -->
            <execution>
                <goals>
                    <goal>copy-dependencies</goal>
                </goals>
                <configuration>
                    <outputDirectory>${project.build.directory}/lib</outputDirectory>
                    <excludeScope>provided</excludeScope>
                </configuration>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
            <archive>
                <manifest>
                    <!-- 指定 Spring Boot 启动类,实际测试中必须 -->
                    <mainClass>${project.main.class}</mainClass>
                    <!-- 将所有第三方 jar 添加到项目 jar 的 MANIFEST.MF 文件中,这样运行 jar 时依赖包才能被加载 -->
                    <addClasspath>true</addClasspath>
                    <!-- 指定复制第三方 jar 的目标目录为 target/lib/-->
                    <classpathPrefix>./lib/</classpathPrefix>
                </manifest>
            </archive>
        </configuration>
    </plugin>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <!-- repackage 时排除掉 第三方依赖 jar 文件,我们的可运行 Spring Boot 的 jar 文件瞬间变小 ^_^ -->
        <executions>
            <execution>
                <goals>
                    <goal>repackage</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <includes>
                <include>
                    <groupId>nothing</groupId>
                    <artifactId>nothing</artifactId>
                </include>
            </includes>
        </configuration>
    </plugin>
</plugins>

最后

以上就是魔幻美女为你收集整理的Maven打包SpringBoot项目,排除第三方依赖包的全部内容,希望文章能够帮你解决Maven打包SpringBoot项目,排除第三方依赖包所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部