The very popular IntelliJ IDEA has currently saved a lot of dependencies as actual jar files in their git repository e.g.JUnit, which I don’t understand.
Build tools like Maven provide excellent dependency management abilities. Of course Maven dictates a lot of how the build has to happen (source), but imho that is an argument against Maven and not against general automated dependency management.
The Github repository of IntelliJ is very confusing but I think they use Gant – which doesn’t include dependency management, but integrates very well with Ivy. So I can understand why they might like using Gant – but why don’t they use Ivy?
My actual question is therefore: what could be a reason the IntelliJ IDEA developers (or another team in another situation) didn’t use a dependency management system and save their dependencies instead as normal jar files inside their repo?
Many of the best practices of computer science are a moving target. Thus any time you work with old code you are working with old ideas. If you ever manage to write code that lasts over a decade you may find yourself explaining why you didn’t use foo testing, bar management, or baz omniscience.
If you think you know better feel free to fork it, fix it, and issue a pull request. Maybe they didn’t do it because they were waiting for you.
It’s good to be up on all the latest techniques. As a professional developer you’re expected to be able to navigate old techniques as well. Don’t criticize what you aren’t prepared to refactor.
There’s already a comment that says something similar, but I also answered a similar question about NuGet (.NET’s package manager) a few months ago:
Should we include Nuget PACKAGE folder in version control?
I’m not a Java guy and I don’t know Maven, but to me it sounds like it’s similar to NuGet: a central package repository where dependencies are pulled from during build when they don’t exist on the local machine.
The problem is not just that Maven might shut down completely in 10 years.
Even if they “only” have a short outage right now, every project that depends on the repository wouldn’t build during that time.
That’s why we are saving our dependencies inside the repositories at work.
Plus, with internal repositories (like we have at work), there’s also the problem that our internet connection could die (we already had that, and it involved an excavator).
I’m writing software for internal use, and even without an internet connection, we were able to build and deploy.
The last paragraph is probably not as big of a concern with IntelliJ, though…because the repository itself is on GitHub.