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

科技   2024-12-27 14:29   安徽  

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

👉 欢迎加入小哈的星球,你将获得: 专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17..., 点击查看项目介绍
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2期已完结,演示链接:http://116.62.199.48/;

截止目前,累计输出 77w+ 字,讲解图 3088+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,Spring Cloud Alibaba 等等,戳我加入学习,解锁全部项目,已有2600+小伙伴加入

  • 背景
  • 前置要求
  • IDEA 构建慢的原因
  • 设置步骤
    • 1.开启多线程
    • 2.将IDEA的构建/运行委托给MVAEN
    • 3.添加配置文件
  • 结语

背景

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

前置要求

本方案适用于使用 IDEA 和 Maven 进行开发的项目,我当前使用的版本是 IDEA 2023.2 和 Maven 3.8.6,但此方法在其他较新版本中也依然适用。

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>  

结语

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

👉 欢迎加入小哈的星球,你将获得: 专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17..., 点击查看项目介绍
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2期已完结,演示链接:http://116.62.199.48/;

截止目前,累计输出 77w+ 字,讲解图 3088+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,Spring Cloud Alibaba 等等,戳我加入学习,解锁全部项目,已有2600+小伙伴加入


1. 我的私密学习小圈子,从0到1手撸企业实战项目!

2. SpringBoot2.7 就是任性,就是不支持Logback1.3,你能奈他何?

3. 如何快速同步第三方平台数据?

4. 一个牛逼的国产系统开源了!

最近面试BAT,整理一份面试资料Java面试BATJ通关手册,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。

获取方式:点“在看”,关注公众号并回复 Java 领取,更多内容陆续奉上。

PS:因公众号平台更改了推送规则,如果不想错过内容,记得读完点一下在看,加个星标,这样每次新文章推送才会第一时间出现在你的订阅列表里。

“在看”支持小哈呀,谢谢

小哈学Java
码龄9年,前某厂中台研发。专注于Java领域干货分享,不限于BAT面试, 算法,数据库,Spring Boot, 微服务,高并发, JVM, Docker容器,ELK相关知识,期待与您一同进步。
 最新文章