笔者最近工作的时候,接到一个地产集团小程序的研发任务,之前也没有相关经验,于是就从网上找了一个类似的项目来改,就是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部分,先上代码,主要是修改有三处:
spring-boot-maven-plugin插件的配置:把项目内的自己的代码都包含到主jar包内
增加了maven-jar-plugin插件的配置:指定了启动类,不然会找不到主类
增加了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目录下的文件,也贴一下,供参考:
