slachiewicz opened a new issue, #1759: URL: https://github.com/apache/maven-dependency-plugin/issues/1759
A push to master costs 133 to 155 job-minutes across 18 jobs, and the slowest job takes about 15 minutes (six green master runs, 2026-10-06 to 2026-10-13). The integration tests are most of it, and they run one at a time: neither this POM nor maven-plugins 50 or maven-parent 50 sets `invoker.parallelThreads`. ## Where the time goes Run [38349168648](https://github.com/apache/maven-dependency-plugin/actions/runs/38349168648), 155 job-minutes: | Runner | Jobs | Job-minutes | |---|---|---| | Windows | 5 | 63.8 | | Linux | 7 | 50.8 | | macOS | 5 | 40.5 | Inside a job, the ITs dominate: | Job | Total | Unit tests (440) | ITs (105, serial) | |---|---|---|---| | ubuntu, JDK 21, Maven 3.10.0 | 6:10 | 0:37 | 5:01 | | windows, JDK 21, Maven 4.0.0-rc-7 | 13:33 | 0:58 | 11:48 | IT time is spread evenly (2.9 s average on Linux, slowest 6.6 s), so no single IT is worth moving for speed alone. ## Local measurements macOS, 8 cores, JDK 17, Maven 3.10.0-rc-1, `-P run-its verify -DskipTests`, one run each unless noted: | Configuration | Wall time | Result | |---|---|---| | Serial (master) | 208 s | 114 passed | | `0.75C` parallel + cheap forked JVMs | 84 s | `get-artifact-no-transitive` failed, passed on rerun | | Parallel + serial group for shared-repo ITs, no JVM flags | 178 s | 115 passed | | Parallel + serial group + cheap forked JVMs (3 runs) | 93 to 108 s | 115 passed | 115 includes `setup-custom-ear-lifecycle`, which invoker runs in each execution. The failure is a real race: `get-artifact-no-transitive` asserts that `get-artifact-transitive` is absent from the shared `target/local-repo` while another `get-*` IT downloads it. 22 ITs delete fixtures from, or assert on, that shared repository (`get-*`, `purge-local-repository*`, `copy-from-remote-repository`, `unpack-from-remote-repository`, `mdep-592`, `mdep-803`, `build-classpath-output-file-and-property`, `copy-dependencies-graphroots`), so they run serially in a second invoker execution. The forked-JVM flags (`-XX:TieredStopAtLevel=1 -XX:+UseSerialGC` through `JAVA_TOOL_OPTIONS`) carry most of the gain once ITs run in parallel: C2 compiler threads compete with the other builds for CPU. ## Plan - [ ] Run ITs in parallel, with the shared-repo ITs in a serial execution and cheaper forked JVMs - [ ] Re-measure job-minutes on master after it merges; CI runners have 3 to 4 cores, so expect less than the local gain - [ ] Make the shared-repo ITs independent (fixture coordinates of their own) so the serial group shrinks - [ ] Triage the `analyze` (16) and `tree` (11) ITs: those that only check how parameters shape the output move to unit tests - [ ] Convert the 40 of 96 verify scripts that still use `throw new Exception` or `return false` to `assert` Not planned: trimming the OS and JDK matrix. Windows is 41% of job-minutes, but the matrix is the shared workflow's default for every Maven plugin. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
