Leiningen is de facto standard for creating and managing projects in Clojure. To create new project we can simply write:
lein new my-app
and a basic structure of the project is created for us. Now to add any dependencies (and download them from Maven or Clojars repository) we need to modify project.clj
file. Let say we want to generate markdown from a string, so we need to add markdown-clj
project. To do so we need to modify project.clj
file in our project:
(defproject my-app "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.6.0"]
[markdown-clj "0.9.63"]]
:main ^:skip-aot my-app.core)
then we can write such code in \my-app\src\my_app\core.clj
file:
(ns my-app.core
(:require [markdown.core :as mark]))
(defn -main []
(print
(mark/md-to-html-string "#Header")))
Everything works great! But now for unknown reason, temporary, we want to modify md-to-html-string
function (from markdown-clj/src/markdown/core.clj
), to convert all our text to upper case. Figuring out how to do that can take a while (at least for me it wasn’t so intuitive how to change depended code), so I will show you.
First we need to clone git repository to local disk.
git clone https://github.com/yogthos/markdown-clj.git
Then we can modify md-to-html-string
function in core.clj
file:
(defn md-to-html-string
"converts a markdown formatted string to an HTML formatted string"
[text & params]
(when text
(let [input (new StringReader text)
output (new StringWriter)]
(apply (partial md-to-html input output) params)
(clojure.string/upper-case
(.toString output)))))
and change a version name in project.clj
file - to not interfere with the original one:
(defproject markdown-clj "0.9.63-SNAPSHOT"
:description "Markdown parser"
:url "https://github.com/yogthos/markdown-clj"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.6.0"]]
....)
and the last (but most important part) is to install this library in our local Clojure repository. To do that we need to be in markdown-clj
project directory (where the project.clj
file is) and write:
lein install
This will install jar
and pom
of markdown-clj
project, in version 0.9.63-SNAPSHOT
into local repo. We can use it now, by simply specifing correct version in our project.clj
file:
(defproject my-app "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.6.0"]
[markdown-clj "0.9.63-SNAPSHOT"]]
:main ^:skip-aot my-app.core)
After this the modified version of markdown-clj
project will be used. When we execute this code:
(mark/md-to-html-string "#Header")
we will get:
<H1>HEADER</H1>
This can be useful if you need temporary fix a bug or test your future pull request.