clj-easy/graal-build-time

small thing: derivation of clojure version in pom not obvious

Closed this issue · 0 comments

Currently...

I stumbled upon the fact that our pom.xml is generated with the following dependency on org.clojure/clojure:

  <dependencies>
    <dependency>
      <groupId>org.clojure</groupId>
      <artifactId>clojure</artifactId>
      <version>1.11.1</version>
    </dependency>
  </dependencies>

But...

Our deps.edn doesn't depend on clojure.

Diagnosis

The pom version of clojure is brought in by whatever default version of clojure create-basis brings in. Which, I think, is probably the clojure version tools.build depends on.

When we published our last release, we were using clojure.tools.build 0.9.4 which was depending on clojure 1.11.1.

Building to today (2024-07-31) brings in clojure 1.11.2 which is what tools.build 0.10.5 brings in.

Options

Option 1: Do nothing

  • Con: feels a little sloppy
  • Con: we are using a non-obvious clojure version default for our tests and release, this can cause confusion for devs of this project (hence this issue).

Option 2: Don't specify clojure dep in our release pom.xml

  • Argument: A native-image build of a clojure app will have some clojure dep on the classpath.
    The app's dep of clojure will override anything we specify, so why should we specify? The clojure dep could be thought of as "provided".

Option 3: Explicitly depend on clojure version

  • Pro: explicit
  • Pro: is a convention that can be viewed as documenting the minimum version of clojure we support
  • Pro: less head-scratching around what version we are actually testing against

Proposal

I think Option 3 makes the most sense. I think explicitly supporting clojure latest makes sense.
(At the time of this writing Clojure 1.11.3). This does not mean graal-build-time won't work with older versions of clojure but means we only actually validate against the current version of clojure.