leiningen 2 - humane build management for clojure

60
Leiningen 2 Humane build management for ClojureMadeSimple.co.uk

Upload: john-stevenson

Post on 10-May-2015

1.702 views

Category:

Technology


3 download

DESCRIPTION

Developer experience is important and Clojure developers have the pleasure of managing their build process in Clojure with Leiningen.org

TRANSCRIPT

Page 1: Leiningen 2 - Humane build management for Clojure

Leiningen 2

Humane build management for

ClojureMadeSimple.co.uk

Page 2: Leiningen 2 - Humane build management for Clojure

This slide deck is available to follow along with on slideshare.net

slideshare.net/jr0cket

Page 3: Leiningen 2 - Humane build management for Clojure
Page 4: Leiningen 2 - Humane build management for Clojure
Page 5: Leiningen 2 - Humane build management for Clojure

of Java build management

Page 6: Leiningen 2 - Humane build management for Clojure

...there was Ant,Ant begat Ivy,

Ant begat Maven

Page 7: Leiningen 2 - Humane build management for Clojure

… and there was much XML all around

Page 8: Leiningen 2 - Humane build management for Clojure
Page 9: Leiningen 2 - Humane build management for Clojure
Page 10: Leiningen 2 - Humane build management for Clojure
Page 11: Leiningen 2 - Humane build management for Clojure
Page 12: Leiningen 2 - Humane build management for Clojure

build management

Page 13: Leiningen 2 - Humane build management for Clojure

Human verses Computer readable build jobs

Page 14: Leiningen 2 - Humane build management for Clojure

Leiningen… more fun than Maven

… easy way to kick-start your Clojure addiction

Page 15: Leiningen 2 - Humane build management for Clojure

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

Leiningen: package managers

● Ubuntu● Debian● Fedora● CentOS

Page 17: Leiningen 2 - Humane build management for Clojure

Leiningen also staring in

Eclipse plugin Counter Clockwise

Page 18: Leiningen 2 - Humane build management for Clojure

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

...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

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

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

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

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

Over-riding defaults

Page 25: Leiningen 2 - Humane build management for Clojure

lein new template-name my-project

Create project with a different template

Page 26: Leiningen 2 - Humane build management for Clojure

Example: WebNoir template

lein new noir fpdays2012-web

Page 27: Leiningen 2 - Humane build management for Clojure

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

cd my-projectemacs project.clj

Open project in emacs

Page 29: Leiningen 2 - Humane build management for Clojure

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

Group Dependencies

Usually a reversed domain name

Page 31: Leiningen 2 - Humane build management for Clojure

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://clojars.org/

Page 33: Leiningen 2 - Humane build management for Clojure

http://search.maven.com

Page 34: Leiningen 2 - Humane build management for Clojure

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

Add REPL session to all projects

~/.lein/profiles.clj

Page 36: Leiningen 2 - Humane build management for Clojure

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

REPL in Emacs

Page 38: Leiningen 2 - Humane build management for Clojure

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

Leiningen WebRepl plugin

Page 40: Leiningen 2 - Humane build management for Clojure

Local Repositories

(just like Maven)

Page 41: Leiningen 2 - Humane build management for Clojure

Libraries kept in local .m2 folder

Page 42: Leiningen 2 - Humane build management for Clojure

Repositories

https://github.com/technomancy/leiningen/blob/preview/sample.project.clj

Page 43: Leiningen 2 - Humane build management for Clojure

Running your project

Page 44: Leiningen 2 - Humane build management for Clojure

lein runRuns the main function, or specify main with -m option

Create a new project

Page 45: Leiningen 2 - Humane build management for Clojure

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

lein tests

lein tests my.proj.code

lein help tests

Running Tests

Automating test runs ?

Page 47: Leiningen 2 - Humane build management for Clojure

Deployment

Page 48: Leiningen 2 - Humane build management for Clojure

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

project.clj for jar / uberjar

Page 50: Leiningen 2 - Humane build management for Clojure

Clojure code for jar / uberjar

Page 51: Leiningen 2 - Humane build management for Clojure

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

Deploy to Clojars

Or just use lein-clojars

https://github.com/ato/lein-clojars

Page 53: Leiningen 2 - Humane build management for Clojure

Deploying to the Cloud

Page 54: Leiningen 2 - Humane build management for Clojure

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

Leiningen Plug-ins

Page 56: Leiningen 2 - Humane build management for Clojure

Running scriptsCopying files

DVCS (git)Continuous

Integration server (Jenkins)

Page 57: Leiningen 2 - Humane build management for Clojure
Page 58: Leiningen 2 - Humane build management for Clojure

Leiningen.org- Tutorials

- Github Repository- News

- Bug reporting

Page 59: Leiningen 2 - Humane build management for Clojure

Choose Life...Choose Life...

… … choose Clojurechoose Clojure

Page 60: Leiningen 2 - Humane build management for Clojure

Thank you

@jr0cket

ClojureMadeSimple.co.uk

slideshare.net/jr0cket