maven 3.0多線程編譯提高編譯速度

mvn package 默認只使用 單線程 來執行構建生命周期(即順序地構建每一個模塊)。

如果你使用的是多模塊項目,Maven 從 3.0 開始提供了**并行構建(parallel build)**的能力,但它不是默認開啟的。

如何啟用多線程構建?

你可以通過 -T 參數來啟用并行構建。例如:

mvn -T 4 package

表示使用 4個線程 并行構建模塊。

你也可以用下列方式配置:
? -T 1C:使用一個 CPU 核心
? -T 2C:使用兩個 CPU 核心
? -T 0.5C:使用一半 CPU 核心

注意事項:
1. 并行構建只適用于模塊之間無強依賴的情況(Maven 會自動分析依賴)。
2. 不建議對老版本插件或有副作用的插件使用并行構建,可能會造成問題。
3. 日志輸出可能會變亂,建議加上 -B(batch 模式)或使用 --log-file 來寫入日志文件。

如需查看當前 Maven 的并行配置,可執行:

mvn -version

會看到是否有 Multithreaded 相關信息。

命令 含義 示例(8 核 CPU)
-T 1 固定使用 1 個線程 1 線程
-T 4 固定使用 4 個線程 4 線程
-T 1C 每核 1 個線程 8 線程
-T 2C 每核 2 個線程 16 線程
-T 0.5C 每 2 核共用 1 線程 4 線程

常見錯誤

(Too many open files) 是一個典型的 操作系統限制錯誤,通常表示 Maven 或 Java 構建過程中打開的文件句柄數超過了系統允許的最大值。這在并發構建(比如你使用了 mvn -T 多線程)時尤其容易觸發。

🔍 問題分析

背景

每個進程在 Linux/macOS 系統下都有一個最大“打開文件數限制”(file descriptor,簡稱 FD),當構建中打開了太多:
? .jar 文件
? 源代碼文件
? class 文件
? 日志文件
? 依賴模塊

等,就會觸發這個錯誤。

? 解決方案

  1. 查看當前打開文件數限制
ulimit -n

一般默認值是 1024 或 256,遠遠不夠。

  1. 臨時提升當前 shell 的限制
ulimit -n 65535

然后再執行:

mvn -T 2C clean package

這個方法只對當前終端會話有效,重啟 shell 會失效。

?

  1. 永久修改(macOS 示例)

macOS(zsh 或 bash 用戶):

編輯 ~/.zshrc 或 ~/.bash_profile,添加:

ulimit -n 65535

然后運行:

source ~/.zshrc  # 或 source ~/.bash_profile

macOS 系統級(需要 root 權限):

sudo launchctl limit maxfiles 65535 65535

?

  1. 永久修改(Linux 示例)

修改 /etc/security/limits.conf

打開文件數限制(軟限制和硬限制)

your_username soft nofile 65535
your_username hard nofile 65535

修改 /etc/pam.d/common-session(有些系統需要)

session required pam_limits.so

修改 /etc/systemd/user.conf 和 /etc/systemd/system.conf

DefaultLimitNOFILE=65535

然后重啟機器或相關服務。

?

🧠 補充建議
? 如果你用的是 mvn -T 2C(使用 16 個線程),每個線程同時可能打開幾十個文件,文件句柄很快就會用盡。
? 調整為 -T 1C 或 -T 4 也可能避免觸發此問題,作為臨時緩解。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/82283.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82283.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/82283.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python模塊管理環境變量

概要 在 Python 應用中,為了將配置信息與代碼分離、增強安全性并支持多環境(開發、測試、生產)運行,使用專門的模塊來管理環境變量是最佳實踐。常見工具包括: 標準庫 os.environ:直接讀取操作系統環境變量…

K8s 集群運行時:從 Docker 升級到 Containerd

一、背景:Kubernetes容器運行時演進史 自2020年Kubernetes 1.20版本宣布棄用Docker作為默認容器運行時以來,容器技術生態經歷了重大變革。作為CNCF畢業項目,Containerd憑借其輕量化架構、原生CRI支持和卓越性能表現,逐漸成為云原生…

30-消息隊列

一、消息隊列概述 隊列又稱消息隊列,是一種常用于任務間通信的數據結構,隊列可以在任務與任務間、 中斷和任務間傳遞信息,實現了任務接收來自其他任務或中斷的不固定長度的消息,任務能夠從隊列里面讀取消息,當隊列中的…

AI Agent開發第74課-解構AI偽需求的魔幻現實主義

開篇 ??在之前的系列中我們狂炫了AI Agent的各種高端操作(向量數據庫聯動、多模態感知、動態工作流等…),仿佛每個程序員都能用LLM魔法點石成金?。 但今天咱們要潑一盆透心涼的冷水——當企業把AI當成萬能膠水強行粘合所有需求時,連電風扇都能被玩出量子糾纏的魔幻現實…

低代碼AI開發新趨勢:Dify平臺化開發實戰

在人工智能快速發展的今天,AI應用的開發方式也在不斷演變。從傳統的手寫代碼到如今的低代碼甚至零代碼開發,技術的進步讓更多的非專業開發者也能輕松上手。本文將帶你走進Dify平臺化開發的世界,探索如何通過這一強大的低代碼AI開發平臺&#…

開發積累總結

export default 和export const 均用于從模塊導出函數、對象或原始值,區別在于: export default:一個文件中只能有一個,為默認導出,在引用時指定名字。 export const:一個文件中有多個,為命名…

【TCP/IP協議族詳解】

目錄 第1層 鏈路/網絡接口層—幀(Frame) 1. 鏈路層功能 2. 常見協議 2.1. ARP(地址解析協議) 3. 常見設備 第2層 網絡層—數據包(Packet) 1. 網絡層功能 2. 常見協議 2.1. ICMP(互聯網…

vocabulary in program

編號意思(英譯中)音標單詞1n. 稀薄;稀罕;珍奇/?re?r?sn/rareness2n.登記表,注冊簿;注冊員;(人或樂器的)聲區,音區;(適合特定場合使…

整平機技術進階:從原理到實戰的深度解析

一、整平機的力學原理與數學模型 整平機的核心在于通過材料塑性變形消除內應力,其力學過程可簡化為以下模型: 彈塑性變形理論 當材料通過輥輪時,表層受拉應力,芯部受壓應力,超過屈服強度后產生永久變形。 關鍵公式&a…

【b站計算機拓荒者】【2025】微信小程序開發教程 - chapter1 初識小程序 - 3項目目錄結構4快速上手

3 項目目錄結構 3.1 項目目錄結構 3.1.1 目錄介紹 # 1 項目主配置文件,在項目根路徑下,控制整個項目的-app.js # 小程序入口文件,小程序啟動,會執行此js-app.json # 小程序全局配置文件,配置小程序導航欄顏色等信息…

427. 建立四叉樹

https://leetcode.cn/problems/construct-quad-tree/description/?envTypestudy-plan-v2&envIdtop-interview-150思路:這題乍一看很復雜但是只要讀懂題找到規律就會發現其實很簡單 四叉樹的構造規律: 1. 如果一個區域的值全相等,那么這個…

IDEA中創建SpringBoot項目沒有Java8

IDEA中創建SpringBoot項目沒有Java8 文章目錄 IDEA中創建SpringBoot項目沒有Java8一:解決辦法 很久沒單獨創建springboot項目,今天使用idea的Spring Initializr 創建 Spring Boot項目時,發現java版本里,無法選擇jdk1.8,只有17、21、22,所以本文介紹了使用Spring Ini…

聊一聊手動測試與探索性測試的區別

目錄 一 定義與目標 手動測試 探索性測試 二 執行方式 手動測試 探索性測試 三 測試重點及計劃性 手動測試 探索性測試 四 測試效率及成本 手動測試 探索性測試 五 優缺點對比 六 關鍵卻別與總結 七 適應場景 手動測試 探索性測試 八 實際應用與結合 在我們進…

Spring用到的設計模式

Spring框架中廣泛應用了多種設計模式,以提升代碼的靈活性和可維護性。 工廠模式:BeanFactory,整個 IoC 容器就是一個工廠。 單例模式:Spring 管理的 Bean 默認都是單例的。 模版方法:如 RedisTemplate、JdbcTemplat…

Mybatis(2)

sql注入攻擊 SQL注入攻擊是一種常見的網絡安全威脅,攻擊者通過在輸入字段中插入惡意SQL代碼,繞過應用程序的安全機制,直接操縱數據庫。 SQL注入的原理 SQL注入利用應用程序未對用戶輸入進行充分過濾或轉義的漏洞。當用戶輸入被直接拼接到S…

【Node.js】高級主題

個人主頁:Guiat 歸屬專欄:node.js 文章目錄 1. Node.js 高級主題概覽1.1 高級主題架構圖 2. 事件循環與異步編程深度解析2.1 事件循環機制詳解事件循環階段詳解 2.2 異步編程模式演進高級異步模式實現 3. 內存管理與性能優化3.1 V8 內存管理機制內存監控…

冰箱熱交換的原理以及如何加氟

冰箱如何加氟: 氟利昂被節流裝置降壓后,進入冰箱的蒸發器,此時它處于低溫低壓液態狀態。在冰箱內部(例如 0C 或 -10C):它很容易氣化(因為其沸點很低)在氣化過程中吸收周圍熱量。 1…

WordPress多語言插件安裝與使用教程

WordPress多語言插件GTranslate的使用方法 在wordpress網站后臺搜索多語言插件GTranslate并安裝,安裝完成、用戶插件后開始設置,以下為設置方法: 1、先在后臺左側找到Gtranslate,進入到設置界面 2、選擇要顯示的形式&#xff0c…

DELL EMC PowerStore BBU更換手冊

寫在前面 上周給客戶賣了一個BBU電池,客戶要寫一個更換方案。順利完成了更換,下面就把這個更換方案給大家share出來,以后客戶要寫,您就Ctrlc 和Ctrlv就可以了。 下面的步驟是最理想的方式,中間沒有任何的問題&#xff…

FastMCP:為大語言模型構建強大的上下文和工具服務

FastMCP:為大語言模型構建強大的上下文和工具服務 在人工智能快速發展的今天,大語言模型(LLM)已經成為許多應用的核心。然而,如何讓這些模型更好地與外部世界交互,獲取實時信息,執行特定任務&a…