{"action":"created","issue":{"url":"https://api.github.com/repos/cursive-ide/gradle-clojure/issues/14","repository_url":"https://api.github.com/repos/cursive-ide/gradle-clojure","labels_url":"https://api.github.com/repos/cursive-ide/gradle-clojure/issues/14/labels{/name}","comments_url":"https://api.github.com/repos/cursive-ide/gradle-clojure/issues/14/comments","events_url":"https://api.github.com/repos/cursive-ide/gradle-clojure/issues/14/events","html_url":"https://github.com/cursive-ide/gradle-clojure/issues/14","id":248194062,"number":14,"title":"Plugin Direction","user":{"login":"ajoberstar","id":486355,"avatar_url":"https://avatars0.githubusercontent.com/u/486355?v=4","gravatar_id":"","url":"https://api.github.com/users/ajoberstar","html_url":"https://github.com/ajoberstar","followers_url":"https://api.github.com/users/ajoberstar/followers","following_url":"https://api.github.com/users/ajoberstar/following{/other_user}","gists_url":"https://api.github.com/users/ajoberstar/gists{/gist_id}","starred_url":"https://api.github.com/users/ajoberstar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ajoberstar/subscriptions","organizations_url":"https://api.github.com/users/ajoberstar/orgs","repos_url":"https://api.github.com/users/ajoberstar/repos","events_url":"https://api.github.com/users/ajoberstar/events{/privacy}","received_events_url":"https://api.github.com/users/ajoberstar/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":11,"created_at":"2017-08-05T16:25:35Z","updated_at":"2017-08-08T10:59:50Z","closed_at":null,"body":"Recently, @cmf, @jszakmeister, and @ajoberstar had a call with @eriwen from Gradle regarding language plugin development.\r\n\r\nFollowing are my notes and open questions about the next steps.\r\n\r\n## Audience\r\n\r\n## Clojure\r\n\r\n2016 State of Clojure has some data useful to what we would target as baselines. See the [Cognitect blog](http://blog.cognitect.com/blog/2017/1/31/state-of-clojure-2016-results) and [full results](https://www.surveymonkey.com/results/SM-7K6NXJY3/). 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.\r\n\r\n- Clojure:\r\n  - 33% were already targeting pre-releases of 1.9\r\n  - 83% were targeting 1.8\r\n  - No more than 17% target 1.7 or lower\r\n- Java:\r\n  - 95% target Java 8\r\n  - No higher than 15% target 1.7 or lower\r\n- Gradle is only used by 2% of respondents\r\n\r\n## Gradle\r\n\r\nOn the call, Gradle indicated:\r\n\r\n- Using Java 8 as a baseline is pretty common nowadays\r\n- Many plugins will be moving to a Gradle 4.2 baseline due to the new plugin-oriented features coming out\r\n- 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.\r\n- 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.\r\n\r\n### Potential Users\r\n\r\n- Existing Gradle users who want to start using Clojure or standardize their existing Clojure builds onto Gradle.\r\n- Existing Lein or Boot users who:\r\n  - Want to build projects using multiple JVM languages (most likely Java + Clojure)\r\n  - Are just generally curious about Gradle\r\n\r\nCompelling features gradle-clojure and Gradle itself provide:\r\n\r\n- Easier polyglot development (wouldn't be limited to just Java + Clojure)\r\n- Easier development of multiple projects (both Gradle's multi-project and composite builds features are helpful here)\r\n- Access to Gradle's plugin ecosystem\r\n\r\nExpectations Clojure users will have:\r\n\r\n- Easy availability of REPL\r\n- Figwheel or something like that for CLJS development\r\n- Publishing to and getting dependencies from Clojars\r\n- Running Clojure-based test frameworks (clojure.test, test.check, etc)\r\n- Uberjar support (generally leveraging Gradle's shadow plugin instead of building ourselves)\r\n\r\nExpectations Gradle users will have:\r\n\r\n- Clojure support feeling native (i.e. leveraging existing Gradle features as much as possible)\r\n- Lazy/reactive evaluation of build logic\r\n- 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\r\n- Plugin structure (base layer vs opinionated/conventional layer)\r\n- Dedicated task classes (likely extending relevant abstract types in Gradle)\r\n- Test integration that leverages test reporting/filtering/etc\r\n\r\n### Potential Contributors\r\n\r\n- 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](https://github.com/gradle/kotlin-dsl)), but not sure how much there is right now.\r\n- People familiar with Clojure would likely also have familiarity with Java.\r\n\r\n## Next steps\r\n\r\nA bunch of them are logistical.\r\n\r\n- Need to decide on a home for the plugin:\r\n  - 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\r\n  - 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).\r\n  - [Graclj](https://github.com/graclj/graclj) is pretty useless given the direction away from the software model. I have no concerns about abandoning this.\r\n- Need to decide a Java baseline\r\n- Need to decide a Gradle baseline\r\n- Need to decide what language the plugin will be implemented in\r\n  - gradle-clojure is currently Kotlin\r\n- Need to decide what language tests will be written in:\r\n  - If we did Java impl, we might want something less verbose for tests (maybe Clojure)\r\n  - Regardless of language the Gradle TestKit will be a major part of the testing and verifying compatibility across Gradle versions\r\n- Need to decide scope of first release\r\n  - Might be just applying Gradle idioms to gradle-clojure with the current feature set\r\n"},"comment":{"url":"https://api.github.com/repos/cursive-ide/gradle-clojure/issues/comments/320922672","html_url":"https://github.com/cursive-ide/gradle-clojure/issues/14#issuecomment-320922672","issue_url":"https://api.github.com/repos/cursive-ide/gradle-clojure/issues/14","id":320922672,"user":{"login":"jszakmeister","id":448087,"avatar_url":"https://avatars1.githubusercontent.com/u/448087?v=4","gravatar_id":"","url":"https://api.github.com/users/jszakmeister","html_url":"https://github.com/jszakmeister","followers_url":"https://api.github.com/users/jszakmeister/followers","following_url":"https://api.github.com/users/jszakmeister/following{/other_user}","gists_url":"https://api.github.com/users/jszakmeister/gists{/gist_id}","starred_url":"https://api.github.com/users/jszakmeister/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jszakmeister/subscriptions","organizations_url":"https://api.github.com/users/jszakmeister/orgs","repos_url":"https://api.github.com/users/jszakmeister/repos","events_url":"https://api.github.com/users/jszakmeister/events{/privacy}","received_events_url":"https://api.github.com/users/jszakmeister/received_events","type":"User","site_admin":false},"created_at":"2017-08-08T10:59:50Z","updated_at":"2017-08-08T10:59:50Z","body":"> My votes on some of these questions:\r\n> \r\n> Java 8 baseline\r\n> Gradle 4.2 baseline (with a willingness to go higher if more helpful plugin APIs are introduced, I'd rather not work around deficiencies in Gradle in the case of backwards compatibility, particularly until there's a significant userbase)\r\n> Clojure 1.8+ target (though I expect it will be pretty easy to support older versions)\r\n> Java implementation -- While I'm interested in learning Kotlin (so I'm OK if the water runs that way), I think it will be easier to get contributions to a Java-based plugin from Clojure users than Kotlin.\r\n\r\n/me agrees.  And io.github.gradle-clojure sounds like a good idea to me too."}}
{"actor":{"display_login":"jszakmeister"}}