由于项目扩展,项目模块越来越多也越来越大。每次项目启动,构建时间非常长,严重影响做牛马的效率。也在网上找寻提升构建速度的方法,但都不适用,自己研究了下,找到了提升效率的方法,用起来比较舒服,决定来分享分享。
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
- 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
- 视频教程:https://doc.iocoder.cn/video/
本方案适用于使用 IDEA 和 Maven 进行开发的项目,我当前使用的版本是 IDEA 2023.2 和 Maven 3.8.6,但此方法在其他较新版本中也依然适用。
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
- 项目地址:https://github.com/YunaiV/yudao-cloud
- 视频教程:https://doc.iocoder.cn/video/
IDEA 在启动项目时使用的是其内置的 Maven,而这个内置的 Maven 是单线程执行构建任务的。当项目变得庞大且模块繁多时,逐个构建模块的效率自然很低。
此外,IDEA 内置的 Maven 构建配置较为局限,无法根据项目需求进行有效的调优,这也是构建速度慢的原因之一。
打开 IDEA 设置:文件 > 设置 > 构建、执行、部署 > 构建工具 > Maven - 找到“线程计数”,设置为多线程模式(可根据个人电脑的配置设置线程数量,我设置的是 10 个线程)。
IDEA 默认使用其内置的构建工具执行构建,可以将其委托给 Maven,以获得更好的性能:- 打开 IDEA 设置:文件 > 设置 > 构建、执行、部署 > 构建工具 > Maven - 勾选“将 IDE 构建/运行委托给 Maven”
要进一步优化构建,可以通过添加 Maven 扩展和缓存配置来提高构建效率。
步骤
1.在项目根目录下创建 .mvn
文件夹。
2.在.maven
文件夹下添加 extensions.xml
文件,内容如下
<extensions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/EXTENSIONS/1.0.0"
xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
<extension>
<groupId>org.apache.maven.extensionsgroupId>
<artifactId>maven-build-cache-extensionartifactId>
<version>1.1.0version>
extension>
extensions>
3.在.maven
文件夹下添加 maven-build-cache-config.xml
文件,内容如下
<cache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/BUILD-CACHE-CONFIG/1.0.0"
xsi:schemaLocation="http://maven.apache.org/BUILD-CACHE-CONFIG/1.0.0 https://maven.apache.org/xsd/build-cache-config-1.0.0.xsd">
<configuration>
<enabled>trueenabled>
<hashAlgorithm>SHA-256hashAlgorithm>
<validateXml>truevalidateXml>
<remote enabled="false">
<url>http://host:porturl>
remote>
<local>
<location>.build-cachelocation>
<maxBuildsCached>3maxBuildsCached>
local>
<projectVersioning adjustMetaInf="true"/>
configuration>
<input>
<global>
<glob>
{*.java,*.groovy,*.yaml,*.svcd,*.proto,*assembly.xml,assembly*.xml,*logback.xml,*.vm,*.ini,*.jks,*.properties,*.sh,*.bat}
glob>
<includes>
<include>src/include>
includes>
<excludes>
<exclude>pom.xmlexclude>
excludes>
global>
<plugins>
<plugin artifactId="codegen">
<effectivePom>
<excludeProperties>
<excludeProperty>111excludeProperty>
excludeProperties>
effectivePom>
<dirScan mode="auto">
<excludes>
<exclude tagName="outputDirectory"/>
<exclude tagName="directory"/>
excludes>
<tagScanConfigs>
<tagScanConfig tagName="someProperty" glob="*.java" recursive="false"/>
tagScanConfigs>
dirScan>
<executions>
<execution>
<execIds>
<execId>1execId>
<execId>2execId>
execIds>
<dirScan mode="auto">
<includes>
<include tagName="protolocation" recursive="false" glob="*.proto"/>
includes>
dirScan>
execution>
executions>
plugin>
plugins>
input>
<executionControl>
<runAlways>
<plugins>
<plugin artifactId="maven-failsafe-plugin"/>
<plugin artifactId="flatten-maven-plugin"/>
plugins>
<executions>
<execution artifactId="maven-deploy-plugin">
<execIds>
<execId>my-execution-idexecId>
execIds>
execution>
executions>
<goalsLists>
<goalsList artifactId="maven-install-plugin">
<goals>
<goal>installgoal>
goals>
goalsList>
<goalsList artifactId="maven-deploy-plugin">
<goals>
<goal>deploygoal>
goals>
goalsList>
<goalsList artifactId="bb-sdk-codegen">
<goals>
<goal>deploy-localgoal>
goals>
goalsList>
goalsLists>
runAlways>
<reconcile logAllProperties="true">
<plugins>
<plugin artifactId="maven-compiler-plugin" goal="compile">
<reconciles>
<reconcile propertyName="source"/>
<reconcile propertyName="target"/>
<reconcile propertyName="debug"/>
<reconcile propertyName="debuglevel"/>
reconciles>
<logs>
<log propertyName="includes"/>
<log propertyName="excludes"/>
<log propertyName="argLine"/>
logs>
plugin>
<plugin artifactId="duplicate-finder-maven-plugin" goal="check">
<reconciles>
<reconcile propertyName="skip" skipValue="true"/>
<reconcile propertyName="quiet" skipValue="true"/>
reconciles>
plugin>
<plugin artifactId="maven-enforcer-plugin" goal="enforce">
<reconciles>
<reconcile propertyName="skip" skipValue="true"/>
reconciles>
<nologs>
<nolog propertyName="redundantProperty"/>
<nolog propertyName="redundantProperty2"/>
nologs>
plugin>
plugins>
reconcile>
executionControl>
cache>
如果这个方法对你有帮助,记得点个赞支持一下!