I am looking for a way to run a maven plugin, like the formatter plugin or checkstyle, on all sub-modules in parallel. It would look like mvn -T 1C formatter:format with an additional magic option.
This is a bit different from running standard maven actions because each module are independent from each other regardless formatting.

For example, let's consider a project with two sub-modules lib and app. app depends on lib, implementing its underlying logic.
When compiling code, it is not possible to compile app without first compiling lib. However, when formatting code, we can safely do both in parallel.

我怀疑这是不可能的,因为这没有遵循maven架构,面向预定义的生命周期,我们在其上挂接一些插件.但我可能错过了什么????

推荐答案

是的,如果插件正确的话,你可以通过-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'

例如,与版本maven插件进行比较:

$ 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分析了react 堆的顺序.

有趣的是,您提到这可以通过每个插件进行控制.

插件可以简单地读取its上的pom文件,从而绕过react 堆的信息...一些插件可以做到这一点(版本maven-plugin),这意味着插件可以自己做任何事情,但重复了maven本身已经实现的逻辑.

更新:版本maven插件不会覆盖reactor,它不会考虑此信息的存在.它只是在自己工作

Java相关问答推荐

我可以在regex中的字符类中放置断言吗?

为什么接口中的主函数而不是类中的主函数在Java 17中编译和运行没有问题?

int Array Stream System. out. print方法在打印Java8时在末尾添加% sign

Java:根据4象限中添加的行数均匀分布行的公式

如何在Javascript中设置文本区域圆角的样式

Java FX中的河内之塔游戏-在游戏完全解决之前什么都不会显示

扩展到弹出窗口宽度的JavaFX文本字段

对某一Hyroby控制器禁用@cacheable

Helidon 4和Http API

JDK 21-为什么线程局部随机S nextInt不直接用Super.nextInt实现?

Jenv-相同的Java版本,但带有前缀

使用Jolt将字段转换为列表

在Eclipse中调试未导出的JDK模块的Java包

Java17支持哪个MapR版本?

如何读取3个CSV文件并在控制台中按顺序显示?(Java)

如何在Spring Boot中为不同的部署环境管理多个.properties文件?

如何用Micrometer&;斯普肯

如何从指定某些字段的父对象创建子对象

对于 Hangman 游戏,索引 0 超出长度 0 的范围

Java-Apache BufferedHttpEntity 在发送请求时加载整个文件