若依类项目spring boot多模块打包优化实践

笔者最近工作的时候,接到一个地产集团小程序的研发任务,之前也没有相关经验,于是就从网上找了一个类似的项目来改,就是uniapp+若依 开发租房小程序 : 🎉 租房小程序,uniapp+若依,易于维护和扩展 (gitee.com), 这个项目来改。后端用的是小程序配套的,指路地址开源字节快速开发平台: 🔥 一直想做一款追求极致用户体验的快速开发平台,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间对若依框架进行扩展写了一套快速开发系统。如此有了开源字节快速开发平台。该平台基于 Spring Boot + MyBatis + Vue & Element ,包含微信小程序 & Uniapp, Web 报表、三方登录、支付、短信、邮箱、OSS... (gitee.com)

站点巨人的肩膀上,的确很快,一周就搞出来了。但是遇到一个问题。就是后端打的jar包太大了,有80M,导致使用jenkins持续集成工具,传输jar包到目的主机,要花费10来分钟(主要是跨网络,研发主机又太差,带宽只有1Mb)。 想想修改个东西,点击运行,然后等个20分钟才生效,项目急的情况,还不给憋死。怎么办呢?解决办法当然是缩小jar的大小,把第三方依赖分离出主包

思路已经有了,怎么解决百度了。网上很多文章,但是都没有一个比较靠谱的。我就记录下来。首先说明,若依框架是一个多模块的spring boot 工程。工程结构如下

source-admin是启动模块,修改它的pom包的build部分,先上代码,主要是修改有三处:

  1. spring-boot-maven-plugin插件的配置:把项目内的自己的代码都包含到主jar包内

  1. 增加了maven-jar-plugin插件的配置:指定了启动类,不然会找不到主类

  1. 增加了maven-dependency-plugin插件:用于复制第三方依赖。

需要说明的是kaptcha包比较特殊,如果不放在主jar包下,获取验证码的时候,会报ERROR c.v.f.w.e.GlobalExceptionHandler - [handleException,83] - Invalid value 'KaptchaTextCreator' for config parameter 'kaptcha.textproducer.impl,错误,网上说的解决办法是修改jar包,太麻烦,直接打包到主包里头去,不就完事了,所以程序员要学会思考,不能照抄。

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.1.1.RELEASE</version>
                <configuration>
                    <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
                    <includes>
                        <include>
                            <artifactId>source-framework</artifactId>
                            <groupId>cn.source</groupId>
                        </include>
                        <include>
                            <artifactId>source-system</artifactId>
                            <groupId>cn.source</groupId>
                        </include>
                        <include>
                            <artifactId>source-quartz</artifactId>
                            <groupId>cn.source</groupId>
                        </include>
                        <include>
                            <artifactId>source-generator</artifactId>
                            <groupId>cn.source</groupId>
                        </include>
                        <include>
                            <artifactId>source-common</artifactId>
                            <groupId>cn.source</groupId>
                        </include>
                        <include>
                            <artifactId>source-cms</artifactId>
                            <groupId>cn.source</groupId>
                        </include>
                        <include>
                            <artifactId>source-house</artifactId>
                            <groupId>cn.source</groupId>
                        </include>
                        <include>
                            <artifactId>source-im</artifactId>
                            <groupId>cn.source</groupId>
                        </include>

                        <include>
                            <artifactId>source-mall</artifactId>
                            <groupId>cn.source</groupId>
                        </include>
                        <include>
                            <artifactId>source-convention</artifactId>
                            <groupId>cn.source</groupId>
                        </include>
<!--                        验证码这个包比较特殊,如果放在Lib包会报错-->
                        <include>
                            <groupId>com.github.penggle</groupId>
                            <artifactId>kaptcha</artifactId>
                        </include>

                    </includes>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <warName>${project.artifactId}</warName>
                </configuration>
            </plugin>


            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>cn.source.RuoYiApplication</mainClass>
                        </manifest>
                    </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>
                            <!--依赖jar包的输出目录,根据自己喜好配置-->
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
                            <!--排除以下artifactId的jar包-->
                            <excludeArtifactIds>source-framework, source-system, source-quartz, source-generator,
                                source-common, source-cms, source-house, source-im, source-mall, source-convention,kaptcha
                            </excludeArtifactIds>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <finalName>${project.artifactId}</finalName>
    </build>

打包后的效果,主包只剩下800多K了,秒传了。启动命令仍然不变。还是用java -jar方式。

使用jenkins的传输lib目录下的文件,也贴一下,供参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值