How bad can variant selection and attribute matching be? Gradle’s variant selection algorithm has some undocumented behavior: in addition to attributes, which (if any) variant it picks from those compatible also depends on capabilities, classifiers, and artifact selectors.

Gradle’s ConfigurationPublications API (accessible through Configuration#getOutgoing()) contains an API for declaring secondary artifact sets (previously referred to as secondary variants). Secondary artifact sets currently have some likely-buggy behavior when resolving, and are published as full variants which can result in differences in resolution between projects and equivalent published metadata.

I figured I would try a slightly shorter form of post this time; I’ll be covering a few smaller quirks of Gradle dependency resolution that I’ve ran into that don’t necessarily warrant a full post but are interesting enough to share. First off: Gradle’s publication API can lead to unpleasant...

I recently had reason to parse some basic information out of ZIP files. How hard could it be, I thought? Turns out, it can be awfully complicated and at times ambiguous.

I write quite a bit with wooden pencils: for the most part, I use them to take notes during lectures (in my standard atrocious handwriting) but also to annotate printed out papers as I read them, or to sketch out ideas in a notebook. Occasionally, I draw, though unfortunately not...