我正在尋找一種在所有子模塊上并行運行 maven 插件的方法,例如formatter plugin或checkstyle 。它看起來像mvn -T 1C formatter:format一個額外的魔法選項。
這與運行標準 maven 操作有點不同,因為每個模塊都相互獨立,無論格式如何。
例如,讓我們考慮一個包含兩個子模塊lib和app的專案。app依賴于lib,實作其底層邏輯。編譯代碼時,不先編譯lib
是無法編譯app的。但是,在格式化代碼時,我們可以安全地并行執行這兩項操作。
我懷疑這是不可能的,因為這不遵循 maven 架構,面向我們掛鉤一些插件的預定義生命周期。但我可能錯過了什么??
uj5u.com熱心網友回復:
-T1C是的,如果插件正確執行,您假設通過它來加速事情是正確的。如您所見,formatter-maven-plugin它正確地完成了。如您所見,結果表明它提高了速度。
$ hyperfine -L threads 2,4,6,8,1C -p 'git co -- .' 'mvn net.revelc.code.formatter:formatter-maven-plugin:2.18.0:format -T {threads}'
Benchmark 1: mvn net.revelc.code.formatter:formatter-maven-plugin:2.18.0:format -T 2
Time (mean ± σ): 10.111 s ± 0.623 s [User: 17.796 s, System: 0.918 s]
Range (min … max): 9.349 s … 11.446 s 10 runs
Benchmark 2: mvn net.revelc.code.formatter:formatter-maven-plugin:2.18.0:format -T 4
Time (mean ± σ): 8.693 s ± 0.629 s [User: 17.247 s, System: 0.862 s]
Range (min … max): 7.827 s … 9.628 s 10 runs
Benchmark 3: mvn net.revelc.code.formatter:formatter-maven-plugin:2.18.0:format -T 6
Time (mean ± σ): 8.829 s ± 0.567 s [User: 18.438 s, System: 0.965 s]
Range (min … max): 8.098 s … 9.803 s 10 runs
Benchmark 4: mvn net.revelc.code.formatter:formatter-maven-plugin:2.18.0:format -T 8
Time (mean ± σ): 9.257 s ± 0.956 s [User: 18.195 s, System: 0.996 s]
Range (min … max): 8.053 s … 10.938 s 10 runs
Benchmark 5: mvn net.revelc.code.formatter:formatter-maven-plugin:2.18.0:format -T 1C
Time (mean ± σ): 8.568 s ± 0.515 s [User: 17.955 s, System: 0.942 s]
Range (min … max): 7.682 s … 9.537 s 10 runs
Summary
'mvn net.revelc.code.formatter:formatter-maven-plugin:2.18.0:format -T 1C' ran
1.01 ± 0.10 times faster than 'mvn net.revelc.code.formatter:formatter-maven-plugin:2.18.0:format -T 4'
1.03 ± 0.09 times faster than 'mvn net.revelc.code.formatter:formatter-maven-plugin:2.18.0:format -T 6'
1.08 ± 0.13 times faster than 'mvn net.revelc.code.formatter:formatter-maven-plugin:2.18.0:format -T 8'
1.18 ± 0.10 times faster than 'mvn net.revelc.code.formatter:formatter-maven-plugin:2.18.0:format -T 2'
就像與versions-maven-plugin的比較:
$ hyperfine -L threads 2,4,6,8,1C -p 'git co -- .' 'mvn versions:set -DnewVersion=1.0.0-SNAPSHOT -DgenerateBackupPoms=false -T {threads}'
Benchmark 1: mvn versions:set -DnewVersion=1.0.0-SNAPSHOT -DgenerateBackupPoms=false -T 2
Time (mean ± σ): 1.581 s ± 0.104 s [User: 4.641 s, System: 0.198 s]
Range (min … max): 1.513 s … 1.863 s 10 runs
Benchmark 2: mvn versions:set -DnewVersion=1.0.0-SNAPSHOT -DgenerateBackupPoms=false -T 4
Time (mean ± σ): 1.575 s ± 0.031 s [User: 4.627 s, System: 0.190 s]
Range (min … max): 1.527 s … 1.623 s 10 runs
Benchmark 3: mvn versions:set -DnewVersion=1.0.0-SNAPSHOT -DgenerateBackupPoms=false -T 6
Time (mean ± σ): 1.572 s ± 0.034 s [User: 4.608 s, System: 0.195 s]
Range (min … max): 1.530 s … 1.623 s 10 runs
Benchmark 4: mvn versions:set -DnewVersion=1.0.0-SNAPSHOT -DgenerateBackupPoms=false -T 8
Time (mean ± σ): 1.558 s ± 0.031 s [User: 4.589 s, System: 0.192 s]
Range (min … max): 1.481 s … 1.586 s 10 runs
Benchmark 5: mvn versions:set -DnewVersion=1.0.0-SNAPSHOT -DgenerateBackupPoms=false -T 1C
Time (mean ± σ): 1.565 s ± 0.024 s [User: 4.597 s, System: 0.196 s]
Range (min … max): 1.533 s … 1.600 s 10 runs
Summary
'mvn versions:set -DnewVersion=1.0.0-SNAPSHOT -DgenerateBackupPoms=false -T 8' ran
1.00 ± 0.03 times faster than 'mvn versions:set -DnewVersion=1.0.0-SNAPSHOT -DgenerateBackupPoms=false -T 1C'
1.01 ± 0.03 times faster than 'mvn versions:set -DnewVersion=1.0.0-SNAPSHOT -DgenerateBackupPoms=false -T 6'
1.01 ± 0.03 times faster than 'mvn versions:set -DnewVersion=1.0.0-SNAPSHOT -DgenerateBackupPoms=false -T 4'
1.01 ± 0.07 times faster than 'mvn versions:set -DnewVersion=1.0.0-SNAPSHOT -DgenerateBackupPoms=false -T 2'
在這里你可以看到不同的沒有區別-T ..
我想要從終端運行的東西,在 CI 中執行檢查,在 git 合并后清理代碼庫,
您只能通過目標在命令列上呼叫一些目標。(始終插件必須正確執行。)。
在 git 合并后清理代碼庫,
如果您有兩種格式正確的代碼狀態,則合并不會更改格式(假設自動合并將起作用)。除了無法自動完成的沖突(這是 IDE 的作業)。
如果格式不正確,您可能會破壞構建。
我假設它觸發了模塊的并行處理。
并行化基于模塊的級別
那個 maven 會遵循依賴的順序似乎是合乎邏輯的。
是的,反應堆的順序由 Maven 分析。
有趣的是,您提到這可以通過每個插件進行控制。你有任何鏈接,我可以閱讀,好嗎?
插件可以簡單地讀取其上的 pom 檔案,從而繞過反應器的資訊......一些插件這樣做(versions-maven-plugin),這意味著插件可以自己做所有事情,但重復已經實作的邏輯馬文本身。
更新:versions-maven-plugin 不會覆寫它不考慮此資訊存在的反應器。它只是在自己作業
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/481854.html
上一篇:WireMockEducation:test:找不到com.github.JensPiegsa:wiremock-extension:0.4.0
