I’m building a Web app with Clojure, and while I’m very interested in ClojureScript, I haven’t had a chance to ramp up on it yet. So when I needed to add some client-side code to my project, I naturally wrote it in CoffeeScript, a little language I’m very fond of.
Turns out, I was mostly right about that, but not entirely. While in the end the code to accomplish this is fairly straightforward, I wasn’t able to figure it out on my own. I ended up posting a question to the Leiningen mailing list. As is typical of the fantastic Clojure community, I received a response from the creator of the tool, Phil Hagelberg. Phil pointed me in the right direction — towards his intriguing library Robert Hooke — but it took a little back and forth, and trial and error, before I actually had everything working.
I thought it’d be helpful to share the end result, so that next time someone wants to do this they can just use my solution as a starting point.
Using Robert Hooke
(I’m having some trouble embedding the Gist, so for now you’ll have to click through.)
This approach is also compatible with Leiningen 2.0.x.
Using Leiningen 2.0.x’s
According to Phil, this sort of thing is easier with Leiningen 2.0.x:
The gist is that every task in :prep-tasks runs before any
eval-in-project call. This defaults to ["javac" "compile"], but you
can customize it in project.clj. In your case you’d need a
coffeescript task implemented by a plugin, but adding ["coffeescript"]
to :prep-tasks would do the trick, since it would be merged with the
Unfortunately this is beyond my level of familiarity with Maven — I don’t know how to install a plugin which would implement a CoffeeScript compilation task. If anyone wants to give me any pointers, I’d love to add step-by-step instructions. Until then, the Robert Hooke approach documented above works just fine with Leiningen 2.0.x.