-
Notifications
You must be signed in to change notification settings - Fork 3
Closed
Description
Recently, @cmf, @jszakmeister, and @ajoberstar had a call with @eriwen from Gradle regarding language plugin development.
Following are my notes and open questions about the next steps.
Audience
Clojure
2016 State of Clojure has some data useful to what we would target as baselines. See the Cognitect blog and full results. Note that most of these questions allowed multiple answers, so they add up to more than 100%. There's obviously also some self-selection bias in the survey.
- Clojure:
- 33% were already targeting pre-releases of 1.9
- 83% were targeting 1.8
- No more than 17% target 1.7 or lower
- Java:
- 95% target Java 8
- No higher than 15% target 1.7 or lower
- Gradle is only used by 2% of respondents
Gradle
On the call, Gradle indicated:
- Using Java 8 as a baseline is pretty common nowadays
- Many plugins will be moving to a Gradle 4.2 baseline due to the new plugin-oriented features coming out
- Additionally the vast majority of their downloads (I think he mentioned 70%) where Gradle 3.3 (released in January 2017) or higher, so users are probably willing to move to newer versions without huge trouble.
- While we should minimize internal API usage, we may be stuck using some until they've built out more of the plugin-oriented public API.
Potential Users
- Existing Gradle users who want to start using Clojure or standardize their existing Clojure builds onto Gradle.
- Existing Lein or Boot users who:
- Want to build projects using multiple JVM languages (most likely Java + Clojure)
- Are just generally curious about Gradle
Compelling features gradle-clojure and Gradle itself provide:
- Easier polyglot development (wouldn't be limited to just Java + Clojure)
- Easier development of multiple projects (both Gradle's multi-project and composite builds features are helpful here)
- Access to Gradle's plugin ecosystem
Expectations Clojure users will have:
- Easy availability of REPL
- Figwheel or something like that for CLJS development
- Publishing to and getting dependencies from Clojars
- Running Clojure-based test frameworks (clojure.test, test.check, etc)
- Uberjar support (generally leveraging Gradle's shadow plugin instead of building ourselves)
Expectations Gradle users will have:
- Clojure support feeling native (i.e. leveraging existing Gradle features as much as possible)
- Lazy/reactive evaluation of build logic
- Incremental builds -- not necessarily incremental compilation, but running a build twice should result in "UP-TO-DATE" messages and no actions taken by the build
- Plugin structure (base layer vs opinionated/conventional layer)
- Dedicated task classes (likely extending relevant abstract types in Gradle)
- Test integration that leverages test reporting/filtering/etc
Potential Contributors
- People familiar with Gradle would likely have backgrounds in Java (and possibly Groovy). There will be growth of Kotlin in the Gradle ecosystem (particularly with the availability of the Kotlin DSL), but not sure how much there is right now.
- People familiar with Clojure would likely also have familiarity with Java.
Next steps
A bunch of them are logistical.
- Need to decide on a home for the plugin:
- Reusing gradle-clojure (either under the cursive org or its own) -- gradle-clojure is closest to what we'll need to implement going forward and is the only current Gradle Clojure plugin
- New repo in its own org -- Provides a clean start, might be useful if the existing gradle-clojure will need to be maintained for a while (maybe for Colin's purposes with Cursive development).
- Graclj is pretty useless given the direction away from the software model. I have no concerns about abandoning this.
- Need to decide a Java baseline
- Need to decide a Gradle baseline
- Need to decide what language the plugin will be implemented in
- gradle-clojure is currently Kotlin
- Need to decide what language tests will be written in:
- If we did Java impl, we might want something less verbose for tests (maybe Clojure)
- Regardless of language the Gradle TestKit will be a major part of the testing and verifying compatibility across Gradle versions
- Need to decide scope of first release
- Might be just applying Gradle idioms to gradle-clojure with the current feature set
Metadata
Metadata
Assignees
Labels
No labels