News for hackers. Stuff that matters.
Re:Pipenv: promises a lot, delivers very little by bobbyi_settv on Wednesday December 05, 2018 @07:34PM (#18614250)
What's the "one tool" for Java? Is it Maven? Ivy? sbt? Gradle? You may say some of those are "build tools" rather than dependency tools, but I don't see how it's different than what we are discussing in Python.

My Java app declares its dependencies in a build.sbt file using Scala syntax and has them cached in an Ivy directory. Yours declares them in a pom file using XML syntax and has them cached in a Maven directory. Neither of us even tries to do lockfiles and instead just has the CI server build an "uber jar" with all the dependencies bundled in.

Re:Pipenv: promises a lot, delivers very little by EdwardDiego on Thursday December 06, 2018 @02:10AM (#18616031)
We don't need lockfiles in Java land because we generally use version ranges very carefully and rely on package developers following semver - and we certainly don't use "just whatever the latest release is, dude" like shown in the example Pipfile: https://pipenv.readthedocs.io/en/latest/basics/#example-pipf... (the asterisks)

I get why Python needs lockfiles, but goddamn, that need is a symptom of the mess of managing Python dependencies.

There's still a long way to go - I use Airflow for ETL management, and I'm using pipenv to manage it - except Pipenv can't create a lockfile because a dependency of a dependency of Airflow requires in flask-wtf <= 0.7, while another dependency of a dependency requires ==0.8

In a Maven pom.xml I can easily exclude or override the conflicting dependency manually if needed, but I can't in a Pipfile.

Re:Pipenv: promises a lot, delivers very little by icebraining on Thursday December 06, 2018 @02:36AM (#18616128)
rely on package developers following semver

Well, that seems naive. Almost 1/4th of Maven Central libraries broke binary compatibility in patch updates: https://avandeursen.com/2014/10/09/semantic-versioning-in-ma...

Netflix, at least, doesn't agree that Java doesn't need lockfiles: https://github.com/nebula-plugins/gradle-dependency-lock-plu...

Re:Pipenv: promises a lot, delivers very little by ric2b on Thursday December 06, 2018 @07:21AM (#18617357)
> We don't need lockfiles in Java land because we generally use version ranges very carefully

Yes, which is part of the reason why lots of Java projects almost never update their dependencies, because no one remembers why that version was chosen. Splitting what you want from what you have is important to communicate this.

> There's still a long way to go - I use Airflow for ETL management, and I'm using pipenv to manage it - except Pipenv can't create a lockfile because a dependency of a dependency of Airflow requires in flask-wtf <= 0.7, while another dependency of a dependency requires ==0.8

I'm not sure what you expect it would be able to do here...

Re:Pipenv: promises a lot, delivers very little by EdwardDiego on Thursday December 06, 2018 @03:51PM (#18622094)
Enforce Flask-wtf 0.8 and see if it works.
Re:Pipenv: promises a lot, delivers very little by ben-schaaf on Thursday December 06, 2018 @03:11AM (#18616254)
With my very small sample size, maven and gradle's lack of version locking just means it gets tacked on in terrible ways when needed.
Re:Pipenv: promises a lot, delivers very little by allengeorge on Wednesday December 05, 2018 @11:40PM (#18615468)
People use sbt for Java? Thats’s...surprising.

Most shops I know use one of maven or gradle. I can’t think of any other serious contenders in Java (if you still use ant: please consider alternatives).