logoalt Hacker News

oblio06/26/20250 repliesview on HN

> And do keep in mind that the old way was conceived of in a fundamentally different era.

Maven first appeared in 2004 (and took the Java world by storm, it was widely adopted within a few years). Not studying prior art seems to happen a lot in our field.

> Feel free to state your knowledge of what other ecosystems did to solve those problems at the time, and explain what is substantively different from what a venv does and why it's better to do it that way.

Maven leverages the Java CLASSPATH to avoid them entirely.

There is a single, per-user, shared repository.

So every dependency is stored only once.

The local repository is actually more or less an incomplete clone of the remote repository, which makes the remote repository really easy to navigate with basic tools (the remote repo can be an Apache hosted anywhere, basically).

The repository is name spaced and things are very neatly grouped up by multiple levels (groupId, artifactId, version, type).

When you build or run something through Maven, you need:

1. The correct JAVA in your PATH. 2. A pom.xml config file in your folder (yes, Maven is THAT old, from back when XML was cool).

That's it.

You don't need to activate anything, ever.

You don't need to care about locations of whatamajigs in project folders or temp folders or whatever.

You don't need symlinks.

One of the many Maven packaging plugins spits out the correct package format you need for your platform.

Maven does The Right ThingTM, composing the correct CLASSPATH for your specific project/folder.

There is NO concept of a "virtual env", because ALL envs, by default, are "virtual". They're all compartmentalized by default. Nobody's stepping on anyone else's toes.

You take that plus Java's speed, so no need for slightly faster native dependencies (except in very rare cases), and installing or building a Maven project you've never seen in your life is trivial (unless the authors went to great lenghts to avoid that for some weird reason).

Now THAT's design.

Python has a hodge-podge of a programming language ecosystem with a brilliant beginner-friendly programming language syntax UX (most languages in the future will basically look like Python's pseudo-pseudocode), that's slowly starting to look like something that's actually been designed as a programming ecosystem. Similar story to Javascript, actually.

Anyway, this was more of a rant. I know Python is fixing these sins of its infancy.

I'm happy it's doing that because it's making my life a bit more liveable.