this post was submitted on 07 Aug 2023
40 points (91.7% liked)
Programming
17524 readers
510 users here now
Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!
Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.
Hope you enjoy the instance!
Rules
Rules
- Follow the programming.dev instance rules
- Keep content related to programming in some way
- If you're posting long videos try to add in some form of tldr for those who don't want to watch videos
Wormhole
Follow the wormhole through a path of communities !webdev@programming.dev
founded 1 year ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
this definitely does not describe maven. Maven's interface is terrible, can't accomplish a lot of stuff (due to the fact that it doesn't use a DAG...), and people don't write plugins for Maven. For example, nothing like the reckon plugin exists at all for Maven, and writing one would be an absolute nightmare.
this either means you built the perfect CI/CD process to start and wasted a lot of time on it, or you never improve your processes at all. I completely disagree with this.
If that were the case then people would just use Polyglot for Maven and write their build files in Ruby, or Kotlin, or Java, or Yaml, or whatever. But that's clearly not the problem with Maven.
if you don't know what a DAG is then you're really gonna struggle with understanding the VCS tools you use every single day...
I have definitely never read even a tenth of the gradle docs. Yes, Gradle is hard to understand, but just like you don't have to understand a DAG to use git you don't have to understand most of it to use Gradle
this is just good advice for all programming (yes, gradle is programming, unlike maven)
ok, which is it? Do you want
or do you want to build complex builds very easily and be able to modify them in a non-painful manner later?
You can't get both.
The maven projects I've seen and used hardly ever update the maven version. and when we do, it breaks things terribly, except it's because maven packages its own Java version that conflicts with your build, so not only does Maven not list it as a breaking change, you only find out after you've completed the update and then something in prod is broken.. Ask me how I know this.
yes... this is why people like gradle more than maven. you actually have control.
... it's not in disguise... it literally says in the docs and when you are generating a new project, that you are using either Groovy or Kotlin.
Gradle is both more testable and more debuggable than Maven...
yes.. because it wasn't testable... unlike gradle.
finally, something I agree with. Yes you shouldn't replace CI/CD with gradle, I don't know who is doing this though..
.... wat.. gradle shouldn't run tests? it shouldn't call sonarqube? how else are you going to run tests or call sonarqube? The only one I agree with here is infrastructure changes, but even then, that's exactly how CDK works. You call CDK to build and deploy your application. You usually do this through
npx cdk
, but if you wanted to it would massively simplify it to have a single command to handle deploys.yes! yes it did! The switchover was not smooth. But now, every (or at least all the ones I've seen) doc has kotlin examples listed before groovy examples. Most people on the forums and the slack only use kotlin. If you are using Groovy you most likely will struggle much much more than with Kotlin.
wasn't the author just saying that you should avoid adding arbitrary logic? Why would being opinionated be a bad thing here?
umm. no. no you don't. The docs have had Kotlin for a long long time now.
kotlin is wayyyy easier to learn than groovy.
so is the recommendation that Maven now be written in Java? Or Gradle be written in Java? I don't get the recommendation here. My team uses Kotlin for everything. We still are mostly using Maven. Using Kotlin everywhere is a huge benefit. We're trying to switch over to Gradle completely and Gradle having Kotlin as a DSL is fantastic. Needing to deal with XML files sucks, but it's not nearly as bad as how slow and difficult to configure Maven is. If you're using Python you need to learn up to 15 different tools and styles in order to correctly build every project out there. Gradle is a multi-language build tool. It's not just for Java. It can be used for literally any language out there. I've seen it used for building C projects even. You could use it to build a monorepo of every language out there. You should be comparing it to Bazel and Buck rather than Maven.
That is not to say that Gradle is the best build system out there. It has a lot of problems with it. It's definitely not my favorite build system. Bundler, Mix, and Cargo are all much better as a build and dependency management system than Gradle. But Maven is a long, long way down the list.
Maven has a high learning curve, but once learned it is incredibly simple to use.
That high bar is created by the tool configuration. You can change and hack everything, but you have to understand how Maven works to do so. This generally blocks people from doing really stupid things, because you have to learn how maven works to successfully modify it and in doing so you learn why you shouldn't.
This is the exact weakness of Gradle, the barrier for modification is far lower and the tool is far less rigid. So you get lots of people who are still learning implement all sorts of weird and terrible practice.
The end result is I can usually dust off someone elses old maven project and it will build immediately using "mvn clean install", about half the gradle projects I have been brought in on won't without reverse engineering effort because they have things hard coded all over them. A not small percentage are so mangled they can't be built without the dev who wrote it's machine.
Also you really shouldn't be tinkering with your build pipelines that much. Initial constraints determine the initial solution, then periodically you review them to improve. DevSecOps exists to speed development and ease support it isn't a goal in of itself
Completely agree. I can jump into any maven project and understand it with ease. Gradle on the other hand requires deep understanding of the build file due to all the flexibility that it offers.