Leiningen 2 - Humane build management for Clojure
-
Upload
john-stevenson -
Category
Technology
-
view
1.702 -
download
3
description
Transcript of Leiningen 2 - Humane build management for Clojure
![Page 1: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/1.jpg)
Leiningen 2
Humane build management for
ClojureMadeSimple.co.uk
![Page 2: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/2.jpg)
This slide deck is available to follow along with on slideshare.net
slideshare.net/jr0cket
![Page 3: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/3.jpg)
![Page 4: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/4.jpg)
![Page 5: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/5.jpg)
of Java build management
![Page 6: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/6.jpg)
...there was Ant,Ant begat Ivy,
Ant begat Maven
![Page 7: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/7.jpg)
… and there was much XML all around
![Page 8: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/8.jpg)
![Page 9: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/9.jpg)
![Page 10: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/10.jpg)
![Page 11: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/11.jpg)
![Page 12: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/12.jpg)
build management
![Page 13: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/13.jpg)
Human verses Computer readable build jobs
![Page 14: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/14.jpg)
Leiningen… more fun than Maven
… easy way to kick-start your Clojure addiction
![Page 15: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/15.jpg)
Leiningen: Manual install
Download the Leiningen 2 install script from
leiningen.org
Move the lein file to an executable location, eg.
~/bin
Make the install script executable and run the install
chmod u+x ~/bin/lein
lein
![Page 16: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/16.jpg)
Leiningen: package managers
● Ubuntu● Debian● Fedora● CentOS
![Page 17: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/17.jpg)
Leiningen also staring in
Eclipse plugin Counter Clockwise
![Page 18: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/18.jpg)
All the usual tasks...
lein new
lein deps
lein run
lein jar
● Create a new clojure project
● Download all dependencies
● Run your application
● Deploy your app as a jar
![Page 19: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/19.jpg)
...and then some
lein uberjar
lein repl
jack-in
- Include Clojure & all your dependencies in one jar
- Fire up the dynamic coding environment (REPL)
- Hook to start a REPL from within Emacs
![Page 20: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/20.jpg)
lein replFire up the REPL
REPL: read, evaluate, print loop – dynamic environment for Clojure and other lisps
![Page 21: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/21.jpg)
Typing code into the REPL
Develop functions and data structures on the fly
REPL: read, evaluate, print loop – dynamic environment for Clojure and other lisps
![Page 22: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/22.jpg)
lein new my-projectcd my-projectlein deps
Create a new project
Lein deps will check your project.clj configuration file and download any libraries (jar files) that are required by the project
![Page 23: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/23.jpg)
Anatomy of a new project
Note: dashes in project names are converted to underscores to make Java happy!
![Page 24: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/24.jpg)
Over-riding defaults
![Page 25: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/25.jpg)
lein new template-name my-project
Create project with a different template
![Page 26: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/26.jpg)
Example: WebNoir template
lein new noir fpdays2012-web
![Page 27: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/27.jpg)
cd my-project
git init
Create a repo on github & add it to your project
git remote add origin [email protected]/account/project.git
git push -u origin master
Version your project with Git
You may want to edit your .git-ignore file also
![Page 28: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/28.jpg)
cd my-projectemacs project.clj
Open project in emacs
![Page 29: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/29.jpg)
project.clj - project definition
Lein deps will check this project.clj configuration file and download any libraries (jar files) that are required by the project
![Page 30: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/30.jpg)
Group Dependencies
Usually a reversed domain name
![Page 31: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/31.jpg)
Dev Dependencies
Dev-dependencies: Add libraries only needed for development, not packaged when code deployed
![Page 32: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/32.jpg)
https://clojars.org/
![Page 33: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/33.jpg)
http://search.maven.com
![Page 34: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/34.jpg)
Add a REPL session
REPL: read, evaluate, print, loop – dynamic environment for Clojure and other lisps
![Page 35: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/35.jpg)
Add REPL session to all projects
~/.lein/profiles.clj
![Page 36: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/36.jpg)
M – x clojure-jack-in
Fire up the REPL in Emacs
M – x represents the keyboard combination of the meta key followed by x. Then the command clojure-jack-in is entered.
![Page 37: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/37.jpg)
REPL in Emacs
![Page 38: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/38.jpg)
Add web based REPL
REPL: read, evaluate, print, loop – dynamic environment for Clojure and other lisps
~/.lein/profiles.clj
![Page 39: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/39.jpg)
Leiningen WebRepl plugin
![Page 40: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/40.jpg)
Local Repositories
(just like Maven)
![Page 41: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/41.jpg)
Libraries kept in local .m2 folder
![Page 42: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/42.jpg)
Repositories
https://github.com/technomancy/leiningen/blob/preview/sample.project.clj
![Page 43: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/43.jpg)
Running your project
![Page 44: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/44.jpg)
lein runRuns the main function, or specify main with -m option
Create a new project
![Page 45: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/45.jpg)
lein trampoline run
-m my-app.server 5000
Long running processes
Web applications - noir - enclojure - ring
![Page 46: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/46.jpg)
lein tests
lein tests my.proj.code
lein help tests
Running Tests
Automating test runs ?
![Page 47: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/47.jpg)
Deployment
![Page 48: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/48.jpg)
Jars & Uber Jarslein jar- package up your project,
requires Clojure on the server
lein uberjar- package up everything, even Clojure
![Page 49: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/49.jpg)
project.clj for jar / uberjar
![Page 50: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/50.jpg)
Clojure code for jar / uberjar
![Page 51: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/51.jpg)
Deploy to Clojars
Create a maven pom
lein pom
Create a maven pom
scp pom.xml myproject-0.1.0.jar [email protected]:
![Page 52: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/52.jpg)
Deploy to Clojars
Or just use lein-clojars
https://github.com/ato/lein-clojars
![Page 53: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/53.jpg)
Deploying to the Cloud
![Page 54: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/54.jpg)
Uses your Leiningen project.clj
- Create your account & install the toolbelt
- Create your instance
- Push your git repo
- Fire up your browser
blog.raynes.me/blog/2011/11/03/moving-try-clojure-to-heroku/
devcenter.heroku.com/articles/clojure-web-application
![Page 55: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/55.jpg)
Leiningen Plug-ins
![Page 56: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/56.jpg)
Running scriptsCopying files
DVCS (git)Continuous
Integration server (Jenkins)
![Page 57: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/57.jpg)
![Page 58: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/58.jpg)
Leiningen.org- Tutorials
- Github Repository- News
- Bug reporting
![Page 59: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/59.jpg)
Choose Life...Choose Life...
… … choose Clojurechoose Clojure
![Page 60: Leiningen 2 - Humane build management for Clojure](https://reader033.fdocuments.us/reader033/viewer/2022060108/554f5f96b4c905c8088b48f2/html5/thumbnails/60.jpg)
Thank you
@jr0cket
ClojureMadeSimple.co.uk
slideshare.net/jr0cket