Java has Maven and Gradle that serve as package managers. I'd say they are not any more complex than npm, except if you need complexity to do something very specific.
> except if you need complexity to do something very specific.
and i do argue that maven has the complexity correctly silo'ed - you need to write a maven plugin to do anything complex and custom, and fit that plugin into the maven ecosystem/api/framework (however deep you need to go).
As opposed to the 'normal' Makefile style build, where you add instructions and scripts (which i think both Ant and gradle inherited the idea from, and thus neither really makes for better builds imho).
You don’t even need GraalVM. Use jlink (part of the JDK) to create a JVM runtime with only the parts of it that you use, specially if you use the module system. Then you distribute your app as a binary basically, plus the resources it needs (the class files and images/text/etc files). I prefer that to using Graal because very often using Graal requires specifying extra metadata and behavior may differ from what you test, not to mention the atrocious compilation times and its lack of a JIT which means it may start faster, but peak performance is very likely lower.
and i do argue that maven has the complexity correctly silo'ed - you need to write a maven plugin to do anything complex and custom, and fit that plugin into the maven ecosystem/api/framework (however deep you need to go).
As opposed to the 'normal' Makefile style build, where you add instructions and scripts (which i think both Ant and gradle inherited the idea from, and thus neither really makes for better builds imho).