一个技巧,优雅解决 IDEA 构建速度慢的问题

科技   2024-12-26 11:55   上海  

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入芋道快速开发平台知识星球。下面是星球提供的部分资料: 

👉这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号等等功能:

  • Boot 仓库:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • Cloud 仓库:https://gitee.com/zhijiantianya/yudao-cloud
  • 视频教程:https://doc.iocoder.cn
【国内首批】支持 JDK 21 + SpringBoot 3.2.2、JDK 8 + Spring Boot 2.7.18 双版本 

来源:blog.csdn.net/LiuCJ_20000
/article/details/138902163


背景

由于项目扩展,项目模块越来越多也越来越大。每次项目启动,构建时间非常长,严重影响做牛马的效率。也在网上找寻提升构建速度的方法,但都不适用,自己研究了下,找到了提升效率的方法,用起来比较舒服,决定来分享分享。

基于 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 构建慢的原因

IDEA 在启动项目时使用的是其内置的 Maven,而这个内置的 Maven 是单线程执行构建任务的。当项目变得庞大且模块繁多时,逐个构建模块的效率自然很低。

此外,IDEA 内置的 Maven 构建配置较为局限,无法根据项目需求进行有效的调优,这也是构建速度慢的原因之一。

设置步骤

1.开启多线程

打开 IDEA 设置:文件 > 设置 > 构建、执行、部署 > 构建工具 > Maven - 找到“线程计数”,设置为多线程模式(可根据个人电脑的配置设置线程数量,我设置的是 10 个线程)。

2.将IDEA的构建/运行委托给MVAEN

IDEA 默认使用其内置的构建工具执行构建,可以将其委托给 Maven,以获得更好的性能:- 打开 IDEA 设置:文件 > 设置 > 构建、执行、部署 > 构建工具 > Maven - 勾选“将 IDE 构建/运行委托给 Maven”

3.添加配置文件

要进一步优化构建,可以通过添加 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.extensions</groupId>  
        <artifactId>maven-build-cache-extension</artifactId>  
        <version>1.1.0</version>  
    </extension>  
</extensions>  

3.在.maven文件夹下添加 maven-build-cache-config.xml 文件,内容如下

<?xml version="1.0" encoding="UTF-8" ?>  
<!---  
 Licensed to the Apache Software Foundation (ASF) under one or more  
 contributor license agreements.  See the NOTICE file distributed with  
 this work for additional information regarding copyright ownership.  
 The ASF licenses this file to You under the Apache License, Version 2.0  
 (the "License"); you may not use this file except in compliance with  
 the License.  You may obtain a copy of the License at  
  
      http://www.apache.org/licenses/LICENSE-2.0  
  
 Unless required by applicable law or agreed to in writing, software  
 distributed under the License is distributed on an "AS IS" BASIS,  
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
 See the License for the specific language governing permissions and  
 limitations under the License.  
-->
  
<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">
  
  
    <!--  
        Template Maven build cache configuration  
     -->
  
  
    <configuration>  
        <enabled>true</enabled>  
        <hashAlgorithm>SHA-256</hashAlgorithm>  
        <validateXml>true</validateXml>  
        <remote enabled="false">  
            <url>http://host:port</url>  
        </remote>  
        <local>  
            <location>.build-cache</location>  
            <maxBuildsCached>3</maxBuildsCached>  
        </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.xml</exclude>  
            </excludes>  
        </global>  
        <plugins>  
            <plugin artifactId="codegen">  
                <effectivePom>  
                    <excludeProperties>  
                        <excludeProperty>111</excludeProperty>  
                    </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>1</execId>  
                            <execId>2</execId>  
                        </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-id</execId>  
                    </execIds>  
                </execution>  
            </executions>  
            <goalsLists>  
                <goalsList artifactId="maven-install-plugin">  
                    <goals>  
                        <goal>install</goal>  
                    </goals>  
                </goalsList>  
                <goalsList artifactId="maven-deploy-plugin">  
                    <goals>  
                        <goal>deploy</goal>  
                    </goals>  
                </goalsList>  
                <goalsList artifactId="bb-sdk-codegen">  
                    <goals>  
                        <goal>deploy-local</goal>  
                    </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>  
                    <!-- whitelist of logged properties-->  
                    <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>  
                    <!-- blacklisted from logging properties-->  
                    <nologs>  
                        <nolog propertyName="redundantProperty"/>  
                        <nolog propertyName="redundantProperty2"/>  
                    </nologs>  
                </plugin>  
            </plugins>  
        </reconcile>  
    </executionControl>  
</cache>  

结语

如果这个方法对你有帮助,记得点个赞支持一下!


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,长按”或“扫描”下方二维码噢

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

文章有帮助的话,在看,转发吧。

谢谢支持哟 (*^__^*)

Java基基
一个苦练基本功的 Java 公众号,所以取名 Java 基基
 最新文章