3 ms·
My main problem with Maven is that it's dog slow and incremental compilation doesn't really work, especially on CI. For huge repos that's a real issue. In a se
by Tainnor 1y ago
My main problem with Maven is that it's dog slow and incremental compilation doesn't really work, especially on CI. For huge repos that's a real issue.
In a sense I feel that part of the microservice craze is due to the fact that many of our build systems are not good enough to allow us to work with huge monoliths efficiently. Gradle is a bit better (definitely faster), but comes with additional complexity. Haven't tried Mill.
- lihaoyi 1y agoAuthor here. Mill definitely works pretty well for monorepos. Within a single module Mill incrementally compiles the Java files, between modules Mill caches and parallelizes things much more aggressively, and when running tests Mill can take your PR's `git diff` and selectively execute only tests downstream of your changes. This all comes built-in without any plugins or anything, and serves to help speed up dev and CI workflows even on pretty large codebases.
- Tainnor 1y agoDoes Mill have the capability to enforce dependency constraints on transitive versions without declaring them explicitly? I find this to be quite a useful feature for dealing with automated security review and gradle can do that: https://docs.gradle.org/current/userguide/dependency_constraints.html https://docs.gradle.org/current/userguide/dependency_constra...
- lihaoyi 1y agoYes, that's handled by Mill's bill-of-materials (BOM) support https://mill-build.org/mill/fundamentals/library-deps.html#_dependency_management https://mill-build.org/mill/fundamentals/library-deps.html#_...
- javanonymous 1y agoI haven't used it myself, but I know there is a plugin for a Maven build cache. It seems like it should improve incremental builds https://maven.apache.org/extensions/maven-build-cache-extension/ https://maven.apache.org/extensions/maven-build-cache-extens... > Incremental builds work on the modified part of the project graph part only > Subtree support for multimodule projects builds part of the codebase in isolation > Version normalization supports project version agnostic caches > Project state restoration (partial) avoids repeating expensive tasks like code generation