Skip to content
Fetching contributors…
Cannot retrieve contributors at this time
181 lines (172 sloc) 10 KB
;; This is an annotated example of the options that may be set in a
;; project.clj file. It is a fairly contrived example in order to
;; cover all options exhaustively; it shouldn't be considered a
;; representative configuration. For a more detailed explanation of
;; some of the terms run "lein help tutorial".
;; The project is named "sample", and its group-id is "org.example".
(defproject org.example/sample "1.0.0-SNAPSHOT" ; version "1.0.0-SNAPSHOT"
;; Beyond this point you may prepend a form with unquote, or ~, to eval it.
;; The descrption text is searchable from repositories like Clojars.
:description "A sample project"
:url ""
;; The mailing list of the project. If the project has multiple mailing
;; lists, use the :mailing-lists key (bound to a seq of mailing list
;; descriptions as below).
:mailing-list {:name "sample mailing list"
:archive ""
:other-archives [""
:post ""
:subscribe ""
:unsubscribe ""}
;; The project's license. :distribution should be :repo or :manual;
;; :repo means it is ok for public repositories to host this project's
;; artifacts. A seq of :licenses is also supported.
:license {:name "Eclipse Public License - v 1.0"
:url ""
:distribution :repo
:comments "same as Clojure"}
;; Dependencies are listed as [group-id/name version].
:dependencies [[org.clojure/clojure "1.1.0"]
[org.clojure/clojure-contrib "1.1.0"]
[org.jclouds/jclouds "1.0-RC6" :classifier "jdk15"]
[log4j "1.2.15" :exclusions [javax.mail/mail
;; Global exclusions are applied across the board, as an alternative
;; to duplication for multiple depedencies with the same excluded libraries.
:exclusions [org.apache.poi/poi
;; Warns users of earlier versions of Leiningen.
:min-lein-version "1.3.0"
;; Delete .class files that do not have a correspoinding package in
;; the src/ directory. Workaround for Clojure bug CLJ-322. Causes problems
;; with protocols in upstream libraries; false by default. Set to
;; true to delete all non-project classes or set to a seq of regexes
;; to only delete class files that match one of the regexes.
:clean-non-project-classes true
;; If :clean-non-project-classes is set to true, you can set this to
;; be a regex; all class filenames that match this regex will be preserved.
:class-file-whitelist #"^(org/example|clojure)"
;; Additional files (besides :compile-path contents and jars/uberjars)
;; to be deleted during clean phase. May contain %s, which will be replaced
;; with the project's current version number.
:extra-files-to-clean ["tmp" "sample-%s.tar"]
;; If the files you want to delete can't be exact matches, you can
;; use a regex that will be matched against filenames in the project root.
;; Defaults to #"^$NAME-.*\.jar$".
:regex-to-clean #"hs_err_pid.*"
;; Paths to include on the classpath from each project in the
;; checkouts/ directory. (See the FAQ in the Readme for more details
;; about checkout dependencies.) Set this to be a vector of
;; functions that take the target project as argument. Defaults to
;; [:source-path :compile-path :resources-path], but you could use
;; the following to share code from the test suite:
:checkout-deps-shares [:source-path :test-path
~(fn [p] (str (:root p) "/lib/dev/*"))]
;; Load these namespaces on startup to pick up hooks from them. Hooks
;; generally come from plugins, but may be included in your project source.
:hooks [leiningen.hooks.difftest]
;; Predicates to determine whether to run a test or not. See tutorial.
:test-selectors {:default (fn [t] (not (or (:integration v) (:regression v))))
:integration :integration
:regression :regression}
;; These namespaces will be AOT-compiled. Needed for gen-class and
;; other Java interop functionality. :namespaces is an alias for this.
;; Put a regex here to compile all namespaces whose names match.
:aot [org.example.sample]
;; The -main function in this namespace will be run at launch if you
;; create an uberjar. Repl sessions will start in this namespace as well.
;; Set :skip-aot metadata on this symbol to use it for other things like the
;; run task or shell wrappers without bringing in AOT if you don't need an
;; executable uberjar.
:main org.example.sample
;; This namespace will get loaded automatically when you launch a repl.
:repl-init sample.repl-helper
;; These will get passed to clojure.main/repl; see its docstring for details.
:repl-options [:prompt (fn [] (print "your command, master? ") (flush))]
;; Customize the socket the repl task listens on.
:repl-port 4001
:repl-host ""
;; A form to prepend to every form that is evaluated inside your project.
;; Allows working around the Gilardi Scenario:
:project-init (require 'clojure.pprint)
;; If your -main namespace takes a long time to load, it could time out the
;; repl connection. Increase this to give it more time. Defaults to 100.
:repl-retry-limit 1000
;; Emit warnings on all reflection calls.
:warn-on-reflection true
;; Set this in order to only use the :repositories you list below. Note that,
;; if any artifacts are not found, Maven Central will still be reported to
;; have been checked, even though it was not.
:omit-default-repositories true
:repositories [["" ""]
{:url ""
;; If a repository contains releases only; setting :snapshots
;; to false will speed up dependency checking.
:snapshots false
;; You can also set the policies for how to handle :checksum
;; failures to :fail, :warn, or :ignore. In :releases, :daily,
;; :always, and :never are supported.
:releases {:checksum :fail
:update :always}}]
;; Repositories named "snapshots" and "releases" automatically
;; have their :snapshots and :releases disabled as appropriate.
["snapshots" {:url ""
;; Also supports :private-key and :passphrase.
:username "milgrim" :password "locative.1"}]
["releases" {:url ""
:username "milgrim" :password "locative.1"}]]
;; the deploy task will give preference to repositories specified in
;; :deploy-repositories, and repos listed there will not be used for
;; dependency resolution
:deploy-repositories [["releases" {:url ""
:username "milgrim" :password "locative.1"}]
["snapshots" ""]]
;; If you'd rather use a different directory structure, you can set these.
:source-path ["src" "src/main/clojure"]
:compile-path "target/classes" ; for .class files
:library-path "target/dependency" ; for .jar files
:test-path ["test" "src/test/clojure"]
:resources-path ["src/main/resource"] ; non-code files included in classpath/jar
;;TODO: does dev-resources-path still do anything w/ profiles?
:dev-resources-path "src/test/resource" ; added to dev classpath but not jar
:native-path "src/native" ; where to look for native dependencies
:target-dir "target/ " ; where to place the project's jar file
:extra-classpath-dirs ["script"] ; more classpath entries not included in jar
:jar-name "sample.jar" ; name of the jar produced by 'lein jar'
:uberjar-name "sample-standalone.jar" ; as above for uberjar
;; Options to pass to java compiler for java source
;; See
:javac-options {:destdir "classes/"}
:java-source-path "src/main/java" ; location of Java source
;; Leave the contents of :source-path out of jars (for AOT projects)
:omit-source true
;; Files with names matching any of these patterns will be excluded from jars
:jar-exclusions [#"(?:^|/).svn/"]
;; Same thing, but for uberjars.
:uberjar-exclusions [#"META-INF/DUMMY.SF"]
;; Set arbitrary key/value pairs for the jar's manifest.
:manifest {"Project-awesome-level" "super-great"}
;; You can set JVM-level options here.
:jvm-opts ["-Xmx1g"]
;; If your project is a Leiningen plugin, set this to skip the subprocess step
:eval-in-leiningen false
;; Set parent for working with in a multi-module maven project
:parent [org.example/parent "0.0.1" :relative-path "../parent/pom.xml"]
;; You can add extensions to the build process (such as add an ftp
;; provider for the Wagon transport mechanism), as well as make
;; plugins active which make changes to the build lifecycle.
:extensions [[org.apache.maven.wagon/wagon-webdav "1.0-beta-2"]
[foo/bar-baz "1.0"]])
;;TODO: does the prepend-tasks function still exist?
;; You can use Robert Hooke to modify behaviour of any task function,
;; but the prepend-tasks function is shorthand that is more convenient
;; on tasks that take a single project argument.
;; (use '[leiningen.core :only [prepend-tasks]]
;; '[leiningen.deps :only [deps]]
;; '[leiningen.clean :only [clean]]
;; '[leiningen.pom :only [pom]])
;; (prepend-tasks #'deps clean pom)
Jump to Line
Something went wrong with that request. Please try again.