jepsen-io / jepsen

A framework for distributed systems verification, with fault injection
6.68k stars 710 forks source link

Jepsen jars on Maven are uberjars - is that intended? #535

Open KingMob opened 2 years ago

KingMob commented 2 years ago

Hi Kyle, I'm Matthew, the current maintainer of Aleph/Manifold/byte-streams. First, thanks for the years of entertaining database teardowns; I've never used Jepsen, but I found your posts very interesting.

Someone on #aleph was having issues with including jepsen as a dep in their project with newer versions of Aleph, and I traced the issue to the 0.2.6 Maven jar being an uberjar, which means they include older versions. When Jepsen's jar ends up earlier in the classpath, it pulls in its own version of byte-streams and manifold, which are missing a fn arity that newer Aleph relies on. (0.2.5 and 0.2.4 are also uberjars.)

Was this intentional? I know Jepsen is sort of its own stand-alone thing, but I've always thought Maven was for library jars, not uberjars.

aphyr commented 2 years ago

Huh, that's weird! I built and deployed it with lein deploy, same as always. But yeah, looking at the jar that gets pulled down from Clojars, it does include code for byte_streams, along with some other deps like analemma, clj-ssh, etc. Weirdly it's not a full uberjar--that's 30 MB, and the jar we build is only 5 MB and change. I wonder if this might be an... AOT thing somehow? AOT only shows up in our uberjar profile though, and that shouldn't be what gets built via lein deploy... very strange.

KingMob commented 2 years ago

Yeah, AOT sounds more like it, then. I almost never use AOT, sorry I can’t help more.